【问题标题】:Parse DateTime without Timezone information into specific Timezone将没有时区信息的 DateTime 解析为特定时区
【发布时间】:2013-04-03 21:54:50
【问题描述】:

这是昨天回答的问题的后续内容..

Convert 12hr Time String to DateTime object

xml 提要中的那些时间是 EST(谁做的?),但我们的时区是 BST。

所以晚上 10:30 是 02:30 AM UTC 或 03:30 AM BST

但是,TryParseExact 会产生当地时间晚上 10:30(因为没有时区信息,这是可以预期的)

所以问题;如何将该时间解析为 UTC 上午 02:30 而不是 BST 晚上 10:30?

【问题讨论】:

    标签: c# datetime timezone


    【解决方案1】:

    但是,TryParseExact 会产生当地时间晚上 10:30

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

    您可以将其传递给适当的TimeZoneInfo 以应用特定时区并获得适当的DateTimeOffset,但您需要记住实际涉及的时区。 (偏移量与时区不同。)

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

    【讨论】:

    • 是的,你是对的。它是未指定的。我已经将它的输出添加到 DateTime.Today 中,这一定是给了它 LocalTime 类型......我的错误。
    • @daveL:我仍然建议您使用 Noda Time,请注意 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多