如何从 DateTime 中剥离时区部分,只留下本地 DateTime 部分? (没有字符串解析或操作)

问题描述 投票:0回答:1

我有一个与此类似的问题: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# 中很难解决的问题,因为我找不到任何在线可用的东西。

有人知道如何解决吗?

c# .net datetime
1个回答
0
投票

如果我理解正确 - 您可以将

DateTimeOffset
DateTimeOffset.DateTime
属性一起使用:

DateTime 属性不受 Offset 属性值的影响。

var parsed = DateTimeOffset.Parse("2024-05-08T17:31:53.9744487+01:00");
var originalLocalDateTime = parsed.DateTime; // DateTimeKind.Unspecified
© www.soinside.com 2019 - 2024. All rights reserved.