使用时区解析日期,跳过时区
本文关键字:过时区 日期 时区 | 更新日期: 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