【问题标题】:Parsing Datetime with timezone offsets使用时区偏移解析日期时间
【发布时间】:2011-09-24 11:43:15
【问题描述】:

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

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# 中解析它们的任何想法?或者有没有人见过他们?

【问题讨论】:

    标签: datetime localization


    【解决方案1】:

    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。

    最后但同样重要的是:为什么还要解析这些 invalid 格式?我建议解决问题的根源并使用本地默认格式(取决于当前用户所在位置的文化和当地时间),而不是创建自己的格式。特殊格式会使最终用户更难理解时间。

    【讨论】:

      【解决方案2】:

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

      DateTime Localization

      但我认为您正在寻找的是 DateTimeOffset Convertsion between DateTime and DateTimeOffset

      【讨论】:

        猜你喜欢
        • 2016-10-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多