【问题标题】:How to parse string which contains GMT to DateTime?如何将包含 GMT 的字符串解析为 DateTime?
【发布时间】:2015-09-23 12:33:43
【问题描述】:

如何转换这个字符串:

string aa ="Thu Jul 02 2015 00:00:00 GMT+0100 (GMT Standard Time)"; 

进入日期时间。

我尝试使用Convert.ToDateTime(aa);,但没有成功 谢谢。

编辑:错误消息 - 字符串未被识别为有效的日期时间

【问题讨论】:

  • MSDN DateTime.Parse 包含您需要的所有信息。
  • 怎么没用?任何错误信息?意外行为?

标签: c# string datetime type-conversion


【解决方案1】:

您可以使用带有正确格式字符串的DateTime.TryParseExact

string dtString = "Thu Jul 02 2015 00:00:00 GMT+0100";
string format = "ddd MMM dd yyyy HH:mm:ss 'GMT'K";
DateTime date;
bool validFormat = DateTime.TryParseExact(dtString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
Console.Write(validFormat ? date.ToString() : "Not a valid format");

如果字符串末尾包含(GMT Standard Time),您可以先将其删除:

dtString = dtString.Replace("(GMT Standard Time)", "").Trim();

或使用这种格式模式:

string format = "ddd MMM dd yyyy HH:mm:ss 'GMT'K '(GMT Standard Time)'";

更多信息:https://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

【讨论】:

    【解决方案2】:

    使用DateTime.Parse方法:

        using System;
    
    public class Example
    {
       public static void Main()
       {
          string[] dateStrings = {"2008-05-01T07:34:42-5:00", 
                                  "2008-05-01 7:34:42Z", 
                                  "Thu, 01 May 2008 07:34:42 GMT"};
          foreach (string dateString in dateStrings)
          {
             DateTime convertedDate = DateTime.Parse(dateString);
             Console.WriteLine("Converted {0} to {1} time {2}", 
                               dateString, 
                               convertedDate.Kind.ToString(), 
                               convertedDate);
          }                              
       }
    }
    // These calls to the DateTime.Parse method display the following output: 
    //  Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM 
    //  Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM 
    //  Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM  
    

    【讨论】:

    • 尝试DateTime convertedDate = DateTime.Parse(aa); 引发异常:String was not recognized as a valid DateTime
    【解决方案3】:

    由于您的字符串中有UTC offset,我更愿意解析DateTimeOffset 而不是DateTime。并且没有办法解析你的 GMT(GMT Standard Time) 部分而不逃避它们。

    顺便说一句,DateTimeDateTimeOffset 都是时区意识。在这种情况下,DateTimeOffsetDateTime 好一点。它具有 UTC 偏移量,但这并不能保证时区信息,因为不同的时区可以具有相同的偏移值。

    即使是,时区缩写也不是标准化的。例如,CST 有多种含义。

    string s = "Thu Jul 02 2015 00:00:00 GMT+01:00 (GMT Standard Time)";
    DateTimeOffset dto;
    if (DateTimeOffset.TryParseExact(s, "ddd MMM dd yyyy HH:mm:ss 'GMT'K '(GMT Standard Time)'", 
                                     CultureInfo.InvariantCulture,
                                     DateTimeStyles.None, out dto))
    {
         Console.WriteLine(dto);
    }
    

    现在,您有一个 DateTimeOffset 作为{02.07.2015 00:00:00 +01:00}

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2012-10-21
      • 2020-07-08
      相关资源
      最近更新 更多