使用时区解析日期,跳过时区

本文关键字:过时区 日期 时区 | 更新日期: 2023-09-27 18:34:24

>我尝试从包含时区信息的字符串中解析日期。输入字符串为 2014-12-17T08:05:39+00:00

我使用DateTime.Parse()方法返回我2014-12-17 09:05:39(添加了一小时)。我住在UTC+1:00 (Warsaw),所以 .NET 采用这个日期作为我的本地时间。

我的问题是如何在跳过时区时使用解析方法,例如2014-12-17T08:05:39+00:00我想获得2014-12-17 08:05:39.

使用时区解析日期,跳过时区

我建议将其解析为DateTimeOffset而不是DateTime。然后,您可以从中获取DateTime,但它将"解析您获得的数据"步骤与"仅使用我想要的位"步骤分开。

有可能有一些方法可以让DateTime.Parse按照你想要的方式使用DateTimeStyles - 我很惊讶它无论如何都会自动转换为"本地"类型 - 但使用DateTimeOffset会让它更清晰。

(当然,我真的建议改用 Noda Time,解析到一个OffsetDateTime,然后从中获取LocalDateTime,但那是另一回事......

如果删除输入字符串中指定时区的部分,则直接解析而不调整为本地时间。然后Unspecified date.Kind

var input = "2014-12-17T08:05:39";
var date = DateTime.Parse(fixedInput);

虽然这有效,但您可能也想看看NodaTime。

您应该尝试使用 DateTimeOffset 而不是 DateTime

DateTimeOffset result = DateTimeOffset.Parse("2014-12-17T08:05:39+00:00", CultureInfo.InvariantCulture);

它给你 : 12/17/2014 8:05:39 AM +00:00