C#datetime解析问题

当尝试将日期/时间从字符串转换为DateTime时,我没有得到正确的值。

DateTime testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); 

我的结果是2012-08-09 8:51:14 PM。 为什么会被抵消? 我只是想让它成为同样的价值。

您正在解析UTC日期,但DateTime.Kind是本地的。 您应该使用DateTimeStyles.AdjustToUniversal进行解析,以将Kind标记为Utc。

  DateTime testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); Trace.WriteLine(testDate); // 8/9/2012 8:51:14 PM Trace.WriteLine(testDate.ToString()); // 8/9/2012 8:51:14 PM Trace.WriteLine(testDate.ToUniversalTime()); // 8/10/2012 12:51:14 AM Trace.WriteLine(testDate.Kind); // Local testDate = DateTime.ParseExact("2012-08-10T00:51:14.146Z", "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); Trace.WriteLine(testDate);// 8/10/2012 12:51:14 AM Trace.WriteLine(testDate.ToString());// 8/10/2012 12:51:14 AM Trace.WriteLine(testDate.ToUniversalTime());// 8/10/2012 12:51:14 AM Trace.WriteLine(testDate.Kind); // Utc 

什么是服务器时区,如果使用AssumeUniversal它会将您的输入时间转换为UTC时间。

你可能在美国东部时间。

您应该使用DateTimeStyles.AdjustToUniversal 。 输入DateTime已经是通用的,而AdjustToUniversal枚举选项会将输入转换为本地时间,尽管您将获得一个Date of DateTimeKind.Unspecified

我建议您只想使用.AssumeLocal而不是.AssumeUniversal

你有一个带有未知时区的时间戳,如果你知道时间戳是指你当地时区发生的事件,那么你应该告诉解析假设时间戳是你本地的(即在你的时区)。

通过使用.AssumeUniversal ,您指示解析器将时间戳视为UTC时间戳,当您使用本地时区显示它时,它会自动偏移该量。

编辑:

一件重要的事情:时间戳中的大写字母“Z”表示它是UTC时间戳,这意味着您确实希望将其视为通用。 如果要将其视为本地时间戳,则应从时间戳和相应的解析字符串中删除Z.

参考: http : //msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#KSpecifier