使用时区偏移量解析日期时间

时间:2011-09-24 11:43:16

标签: datetime localization

我有这些日期时间,在我看来是一个奇怪的标准..

2004/05/17 21:27:16.162 GMT-7
2006/08/01 01:00:00 GMT-7
2010/11/05 13:00:38.844美国/太平洋地区

关于如何在C#中解析它们的任何想法?或者以前有人见过他们?

2 个答案:

答案 0 :(得分:0)

也许您可以看看这个主题,它告诉您如何格式化日期时间

DateTime Localization

但我认为你要找的是DateTimeOffset Convertsion between DateTime and DateTimeOffset

答案 1 :(得分:0)

2010/11/05 13:00:38.844 US/Pacific是您无法在纯.Net中解析的内容,至少不是本地化形式。对于其他人来说,这实际上取决于你是否了解格式。如果这样做,您可以使用DateTime的ParseExact()方法:

var dateString = "2004/05/17 21:27:16.162 GMT-7";
var anotherDateString = "2006/08/01 01:00:00 GMT-7";
DateTime firstResult;
var success = DateTime.TryParseExact(dateString, "yyyy/MM/dd HH:mm:ss.fff 'GMT'z", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out firstResult);
if (success)
    MessageBox.Show(firstResult.ToString());

DateTime anotherResult;
success = DateTime.TryParseExact(anotherDateString, "yyyy/MM/dd HH:mm:ss 'GMT'z", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out anotherResult);
if (success)
    MessageBox.Show(anotherResult.ToString());

请记住,我使用的是InvariantCulture,因为我知道它与en-US完全相同。为了获得正确的结果,您需要使用有效的CultureInfo。

最后但并非最不重要的是:为什么要解析这些无效格式呢?我建议修复问题的根源并使用本地默认格式(取决于文化以及当前用户位置的本地时间)而不是创建自己的格式。特殊格式使得理解时间更难,因为它们对最终用户来说是不自然的。