将不带时区信息的DateTime解析为特定时区

本文关键字:定时区 DateTime 时区 信息 | 更新日期: 2023-09-27 18:08:35

这是昨天回答的一个问题的后续内容。。

将12小时时间字符串转换为DateTime对象

xml提要中的时间是EST(谁做的?(,但我们的时区是BST.

所以晚上10:30是UTC凌晨02:30或英国夏令时凌晨03:30

然而,TryParseExact在当地时间晚上10:30产生(这是意料之中的,因为没有时区信息(

那么问题来了;我如何将该时间解析为UTC凌晨02:30而不是英国夏令时晚上10:30?

将不带时区信息的DateTime解析为特定时区

然而,TryParseExact在本地时间中产生10:30PM

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

您可以将其传递给适当的TimeZoneInfo以应用特定时区,并获得适当的DateTimeOffset,尽管这取决于您记住所涉及的实际时区。(偏移量与时区不同。(

或者,您可以使用我的Noda Time项目,它可以更清楚地区分不同的逻辑类型。您将解析为LocalTime,然后决定与哪个LocalDate连接以生成LocalDateTime,然后您可以使用"America/Loss_Angeles"时区(或Windows等效时区;选择权在您(将其转换为ZonedDateTime。在执行转换时,您需要指定如果给定的本地时间由于夏令时转换而无效或不明确,您希望发生什么。