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

时间:2014-12-17 09:06:47

标签: c# .net datetime

我尝试从包含时区信息的字符串中解析日期。输入字符串为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

3 个答案:

答案 0 :(得分:3)

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

有可能有方法DateTime.Parse使用DateTimeStyles按照您想要的方式运行 - 而且我很惊讶它无论如何都会自动转换为“本地”类型 - 但使用{{1}将使它更清楚。

(当然我确实建议使用Noda Time代替,解析为DateTimeOffset,然后从中获取OffsetDateTime,但这是一个不同的事情...)

答案 1 :(得分:1)

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

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

虽然这很有效,但您也可以查看NodaTime。

答案 2 :(得分:0)

您应该尝试使用DateTimeOffset代替DateTime

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

它会为您提供:12/17/2014 8:05:39 AM +00:00