2017-10-06 100 views
-1

当我试图使用的TryParse方法来分析"2017-09-25T11:06:55+00:00"日期字符串,我得到下面的输出:问题与日期时间解析

{9/25/2017 7:06:55 AM} 

因此,它看起来像11时许被越来越转化为上午7时不知道为什么这发生了什么?是否因为+00:00?? 我需要做什么以便解析的日期时间输出是相同的:即{9/25/2017 11:06:55 AM}

我尝试使用当前区域/文化和日期时间样式。假设本地但没有运气。 (注:我在东部时区)

谢谢。

+2

这是一个UTC时间戳,你得到的可能是您的本地时间。通常最好将代码和数据库中的所有日期保持为UTC,并使用本地时间进行显示。 – juharr

回答

0

您正在使用UTC时区(+00:00),但很明显,您或您的PC位于-04:00时区。

0

如果你可以使用DateTimeOffset,那么我倾向于选择它。您可以保留时区信息,并且您可以访问本对象和UTC对象的日期时间属性。

 var dt = DateTimeOffset.Parse("2017-09-25T11:06:55+00:00"); 
     Console.WriteLine(dt.DateTime);   // 9-25 at 11:06 
     Console.WriteLine(dt.UtcDateTime);  // 9-25 at 11:06 
     Console.WriteLine(dt.LocalDateTime); // 9-25 at 07:06 

如果你知道你总是会被处理UTC,你可以通过调整万能像这样解析:

 var dt = DateTime.Parse("2017-09-25T11:06:55+00:00", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal); 
     Console.WriteLine(dt); // 9-25 at 11:06 
+0

感谢Trio.No,它并不总是UTC。所以下面的代码就可以了:DateTimeStyles styles = DateTimeStyles.AssumeLocal; const string utcIdenfitifier =“+00:00”; (date.Contains(utcIdenfitifier)) styles = DateTimeStyles.AdjustToUniversal; } 如果(DateTime.TryParse(日期,CultureInfo.CurrentCulture,样式,出retVal的)) { 返回retVal的; } – Shirish

+0

同样,你可以使用类似这样的东西:var dto = DateTimeOffset.Parse(“2017-09-25T11:06:55 + 00:00”);返回dto.Offset == TimeSpan.Zero? dto.UtcDateTime:dto.LocalDateTime; – Trioj

0

当你分析它最初它是正确的值,它是刚刚调整到您的时区。你可以用ToUniversalTime迫使它:

DateTime.Parse("2017-09-25T11:06:55+00:00").ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss tt") 

输出

"2017/09/25 11:06:55 AM" 
0

你要正确地分析UTC日期时间,并有2017年9月25日上午11时06分55秒,而不是2017年9月25日上午7:06:55。 +00:00是不正确的UTC格式,您需要将其更改为“2017-09-25T11:06:55z”。

Here is working example