如何解析包含GMT的字符串到DateTime?

时间:2015-07-06 11:21:46

标签: c# string datetime type-conversion

如何转换此字符串:

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

进入DateTime。

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

编辑:错误消息 - 字符串未被识别为有效的DateTime

3 个答案:

答案 0 :(得分: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  

答案 1 :(得分:1)

您可以将DateTime.TryParseExact与正确的格式字符串一起使用:

PKG_CHECK_MODULES

如果字符串末尾包含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();

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

答案 2 :(得分:0)

由于您的字符串中有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}

enter image description here