2012-08-08 48 views
10

我有一个string s = "May 16, 2010 7:20:12 AM CDT,我想转换成DateTime对象。在下面的代码中,当试图使用已知格式分析文本时,我得到的日期格式无法转换错误。格式字符串日期时间与时区

timeStamp = matches[0].Groups[1].Value; 
dt = DateTime.ParseExact(timeStamp, "MMM dd, yyyy H:mm:ss tt", null); 

该时区以CDT UTC形式出现...我认为是什么导致了问题或我的格式?

+0

怎么样'VAR DT = DateTime.ParseExact(S ,“MMM dd,yyyy H:mm:ss tt'CDT'”,null);'? – Vlad 2012-08-08 21:54:38

回答

7

Central Daylight Time

试试这个:

string dts = "May 16, 2010 7:20:12 AM CDT"; 
DateTime dt = 
    DateTime.ParseExact(dts.Replace("CDT", "-05:00"), "MMM dd, yyyy H:mm:ss tt zzz", null); 

编辑:

夏令时请考虑DateTime.IsDaylightSavingTimeTimeZone.CurrentTimeZone

Custom Date and Time Format Strings

+1

如果CDT具有夏时制并变为-4,会发生什么情况? – Greg 2012-08-09 01:55:48

+0

添加到回答 – rumburak 2012-08-09 13:50:31

+0

我在哪里可以找到关于偏移集和时区的信息,我也可以将CST作为时区并需要替换和处理夏令时。 – Warz 2012-08-09 15:25:10

3

确保DateTime明确地是DateTimeKind.Utc。避免使用“GMT”,这对夏令时是不明确的。

var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc); 
    string s = dt.ToLocalTime().ToString("MMM dd, yyyy HH:mm:ss tt \"GMT\"zzz"); 

它给人输出:2010年12月31日19时01分01秒下午GMT-06:00

有关更多详细信息请参阅本Link

+0

使用UTC是正确的,因为它是国际标准,但格林威治时间对于夏令时并不明确。 GMT始终是UTC + 0。英国在夏季切换到BST。有关详情,请访问http://www.differencebetween.com/difference-between-gmt-and-utc/ – thelem 2017-11-22 12:57:49