我有一个与此类似的问题:How to strip timezone from DateTime in .NET Core,但我不想使用任何基于字符串的解析。
基本上我有来自世界各地的事件,其时间戳是通过
DateTime.Now
收集的
我想报告事件及其相应的本地创建时间戳(不是 utc)。
因此,每个日期时间基本上都是这样表示的:
2024-05-08T17:31:53.9744487+03:00
我想仅提取
2024-05-08T17:31:53.9744487
作为日期时间,以便我可以报告事件的当地时间。
我不想像上面的答案那样进行任何字符串解析(或任何字符串操作),因为这些很容易出错。
这是我想通过的测试用例:
[Fact]
public void DateTimeConversionTest()
{
// Arrange
var testDateTime = DateTime.Parse("2024-05-08T17:31:53.9744487+03:00");
var expectedTimeString = "17:31:53";
// Act
var convertedDateTime = testDateTime; // convert DateTime to local DateTime here
var convertedTimeString = convertedDateTime.ToString("HH:mm:ss");
// Assert
Assert.Equal(expectedTimeString, convertedTimeString);
}
这似乎是一个在 C# 中很难解决的问题,因为我找不到任何在线可用的东西。
有人知道如何解决吗?
如果我理解正确 - 您可以将
DateTimeOffset
与 DateTimeOffset.DateTime
属性一起使用:
DateTime 属性不受 Offset 属性值的影响。
var parsed = DateTimeOffset.Parse("2024-05-08T17:31:53.9744487+01:00");
var originalLocalDateTime = parsed.DateTime; // DateTimeKind.Unspecified