将没有时区信息的DateTime解析为特定时区

时间:2013-04-11 15:47:52

标签: c# datetime timezone

这是昨天回答的问题的后续行动。

Convert 12hr Time String to DateTime object

xml Feed中的那些时间是EST(谁这样做?)但我们的时区是BST。

所以晚上10:30是UTC时间凌晨02:30或BST上午03:30

但是,TryParseExact在当地时间晚上10:30产生(假设没有时区信息可以预期)

所以问题;我如何解析那个时间为世界贸易组织上午02:30而不是北京时间晚上10:30?

1 个答案:

答案 0 :(得分:3)

  

然而,TryParseExact在当地时间晚上10:30产生

不,它没有。除非你告诉它。默认情况下,除非模式中有任何偏移指示,否则解析方法将返回DateTime Unspecified DateTime的值 - 这完全合适,因为没有指定任何信息。如果你只是将它转换为一个字符串,它将假设它实际上是一个本地时间,但这不是值本身所说的。你需要理解三种DateTimeOffset - 它是Kind,但这就是我们在BCL中得到的。

您可以将其传递给相应的broken model IMO以应用特定时区并获得适当的LocalTime,但您可以记住所涉及的实际时区。 (偏移量与时区不同。)

或者,您可以使用我的TimeZoneInfo项目,它可以更清楚地区分不同的逻辑类型。您将解析为LocalDate,然后决定加入哪个LocalDateTime以生成ZonedDateTime,然后您可以使用“美国”将其转换为{{1}} / Los_Angeles“时区(或等效的Windows;选择权在你手中)。在执行转换时,如果给定的本地时间由于夏令时转换而无效或不明确,您可以指定要发生的事情。