2012-11-06 53 views
0

什么是一个字符串,如转换的最佳方式:解析日期字符串.NET

Mon Nov 05 2012 21:27:58 GMT+0000 (GMT Standard Time) 
到.NET中 DateTime

?我希望保留尽可能多的日期,即TimeZone。

我想这一点,但它失去了GMT

DateTime.ParseExact(date.Substring(0, 24), 
          "ddd MMM d yyyy HH:mm:ss", 
          CultureInfo.InvariantCulture); 
+0

听起来像是你需要DateTimeOffset'的'混合(这节省了偏移,但没有时区),并表示该时区的字符串。根据字符串的格式,您也可以解析时区。 – CodesInChaos

+0

[datetime.parse并使其使用特定格式](http://stackoverflow.com/questions/341175/datetime-parse-and-making-it-work-with-a-specific-format)? – lstern

+0

@lstern这是一个愚蠢的?这里的问题不仅仅是解析时间,还有保存偏移和时区。 – CodesInChaos

回答

3

这不是很强劲,但它适用于你的例子:

DateTimeOffset.ParseExact(date.Substring(0, 33) // remove time zone 
           .Remove(25,3)  // remove "GMT" before offset 
           ,"ddd MMM dd yyyy HH:mm:ss zzz" 
           ,System.Globalization.CultureInfo.InvariantCulture); 
+1

你需要'DateTimeOffset'而不是'DateTime'来保存偏移量。当然,您需要分别存储时区。 – CodesInChaos

-1

简单的方法来分割字符串,并将其转换使用某些格式进入日期时间。但是如果有其他格式出现在你身上呢。

试试这个。

http://www.codeproject.com/Articles/33298/C-Date-Time-Parser

样品

string str = @"Your program recognizes string : 21 Jun 2010 04:20:19 -0430 blah blah."; 
DateTimeRoutines.ParsedDateTime pdt; 
if(str.TryParseDateTime(DateTimeRoutines.DateTimeFormat.USA_DATE, out pdt) && pdt.IsUtcOffsetFound) 
Console.WriteLine("UTC date&time was found: " + pdt.UtcDateTime.ToString());