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

nqui 发布于 2019-03-09 c# 最后更新 2019-03-09 14:31 2 浏览

这是从昨天回答的问题开始的。 Convert 12hr Time String to DateTime object xml feed中的那些时间是EST(谁做的?),但是我们的时区是BST。 所以晚上10:30是UTC 02:30或BST 03:30 但是,TryParseExact在当地时间产生10:30 PM(由于没有时区信息,因此可以预料) 所以这个问题;我怎样才能把时间解析为02:30 UTC而不是下午10:30 BST?

已邀请:

qanimi

赞同来自:

However, TryParseExact yields 10:30PM in local time
不,它没有。除非你告诉它。默认情况下,除非模式中有任何偏移指示,否则解析方法将返回DateTime值为PLACEHOLDER_FOR_CODE_的PLACEHOLDER_FOR_CODE_ - 这完全合适,因为没有指定任何信息。如果你只是将它转换为一个字符串,它将假设它实际上是一个本地时间,但这不是值本身所说的。你需要了解DateTime这三种 - 它是一个broken model IMO,但这就是我们在BCL中得到的。 您可以将其传递给相应的TimeZoneInfo以应用特定的时区并获得适当的DateTimeOffset,尽管您可以记住所涉及的实际时区。 (偏移量与时区不同。) 或者,您可以使用我的Noda Time项目,它可以更清楚地区分不同的逻辑类型。您将解析为LocalTime,然后决定加入哪个LocalDate以生成LocalDateTime,然后您可以使用“America / Los_Angeles”时区(或等效的Windows;选择权属于您)转换为ZonedDateTime 。在执行转换时,如果给定的本地时间由于夏令时转换而无效或不明确,您可以指定要发生的事情。