C# datetime parse issue
当尝试将日期/时间从字符串转换为DateTime时,我没有得到正确的值。
1 | 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
您应该使用DateTimeStyles.AdjustToUniversal。输入
什么是服务器时区,如果使用
你可能在美国东部时间。
我建议您只想使用
你有一个带有未知时区的时间戳,如果你知道时间戳是指你当地时区发生的事件,那么你应该告诉解析假设时间戳是你本地的(即在你的时区)。
通过使用
编辑:
一件重要的事情:时间戳中的大写字母"Z"表示它是UTC时间戳,这意味着您确实希望将其视为通用。如果要将其视为本地时间戳,则应从时间戳和相应的解析字符串中删除Z.
参考:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#KSpecifier