【问题标题】:Parse String DateTime containing TimeZone Info解析包含时区信息的字符串 DateTime
【发布时间】:2012-02-03 23:44:39
【问题描述】:

我正在尝试将字符串值转换为日期时间值,但出现 System.FormatException 错误。这是因为时区信息是日期字符串的一部分。有什么方法可以处理这种转换吗?

string date = "Wed, 04 Jan 2012 20:18:00 EST";
DateTime dt = Convert.ToDateTime(date);
Console.WriteLine(dt.ToString());

【问题讨论】:

  • CST = 美国和澳大利亚的中部标准时间以及中国标准时间。如果你现在没有问题,那么你以后会的。

标签: c# datetime timezone


【解决方案1】:

我不相信有任何custom date and time format string 会解析或格式化时区缩写。您必须将其剥离,解析本地部分,从缩写中找出哪个时区(祝您好运 - 它们不明确),然后将该时区应用于本地时间以获得 UTC 值(同样,这可能是模棱两可的)。

如果您完全可以控制格式,我会尽量避免包含时区信息,或者如果这很重要,则包含 偏移量 而不是时区(当然,偏移量不会提供相同的信息),或者如果您确实需要时区,则可以使用明确的时区标识符。请注意,.NET 使用 Windows 系统时区标识符;我自己的 Noda Time 项目使用更广泛的 Olson / zoneinfo / tz 标识符,如果这对您有帮助的话。

【讨论】:

  • 我不确定是否可以通过DateTimeOffset
  • @V4Vendetta:你建议怎么做? DateTimeOffset 没有使用一组不同的自定义日期和时间格式字符串说明符,所以除非我错过了该页面上的某些内容,否则我认为没有任何内置...
  • 感谢您的建议。我希望我不必走那条路。不幸的是,我无法控制格式。我已经看到 SyndicationFeed 阅读器能够解析相似的日期,所以希望这是一种更简单的方法。
  • @JonSkeet 我不确定因为我尝试过类似DateTimeOffset.Parse("2012-02-01 11:35:47.743-04:00") 的东西,所以我认为可能
  • 如果 EST 被替换为 Offset 值可能是这样,但它可能根本不是一个好主意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2013-04-03
  • 2012-06-10
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
相关资源
最近更新 更多