解析包含时区信息的字符串日期时间

3

我正在尝试将一个字符串值转换为日期时间值,但是却遇到了System.FormatException错误。这是因为日期字符串中包含时区信息。是否存在一种能够处理此转换的方法?

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

1
CST代表美国、澳大利亚以及中国的中央标准时间。如果你现在没有问题,那么以后就会有。 - Hans Passant
1个回答

5
我不相信有任何 自定义日期和时间格式字符串 可以解析或格式化时区缩写。您需要剥离它,解析本地部分,从缩写中确定意味着哪个时区(祝你好运 - 它们是模糊的),然后将该时区应用于本地时间以获取UTC值(再次,这可能是模糊的)。
如果您能够控制格式,我建议尽可能避免包含时区信息,或者仅包含偏移量而不是时区(当然,偏移量不提供相同的信息),或者如果您确实需要时区,则包括一个明确的时区标识符。请注意,.NET使用Windows系统时区标识符;我的Noda Time项目使用更广泛的Olson / zoneinfo / tz标识符,如果这对您有帮助。

我不确定是否可以通过 DateTimeOffset 实现。 - V4Vendetta
@V4Vendetta:你会如何提出实现?DateTimeOffset没有使用不同的自定义日期和时间格式字符串说明符,所以除非我在那个页面上错过了什么,否则我认为没有内置的东西... - Jon Skeet
谢谢您的建议。我希望我不必走那条路。不幸的是,我无法控制格式。我已经看到SyndicationFeed阅读器能够解析类似的日期,所以希望有更简单的方法。 - threela
@JonSkeet 我不确定,因为我尝试了类似于DateTimeOffset.Parse("2012-02-01 11:35:47.743-04:00")的东西,所以认为可能是可行的。 - V4Vendetta
如果用偏移值替换EST可能会行,但也许根本不是个好主意。 - V4Vendetta
@V4Vendetta:是的,如果您在输入字符串中得到了偏移量,有一些解析方法可以使用 - 但无法解析时区缩写。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接