将不带时区信息的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?
然而,TryParseExact在本地时间中产生10:30PM
不,不是。除非你告诉它。默认情况下,除非模式中有任何偏移指示,否则解析方法将返回DateTime
值,Kind
为Unspecified
,这是完全合适的,因为没有指定任何信息。如果你只是把它转换成一个字符串,它会假设它实际上是一个本地时间,但这不是值本身所说的。你需要了解三种类型的DateTime
——这是一个破碎的模型IMO,但这就是我们在BCL中得到的。
您可以将其传递给适当的TimeZoneInfo
以应用特定时区,并获得适当的DateTimeOffset
,尽管这取决于您记住所涉及的实际时区。(偏移量与时区不同。(
或者,您可以使用我的Noda Time项目,它可以更清楚地区分不同的逻辑类型。您将解析为LocalTime
,然后决定与哪个LocalDate
连接以生成LocalDateTime
,然后您可以使用"America/Loss_Angeles"时区(或Windows等效时区;选择权在您(将其转换为ZonedDateTime
。在执行转换时,您需要指定如果给定的本地时间由于夏令时转换而无效或不明确,您希望发生什么。