我正在为时间解析而苦苦挣扎。我的输入是以“Z”结尾的时间字符串。我希望那是UTC。当我解析该字符串时,两个小时会添加到结果中。我不知道为什么。使用特定的区域性没有任何区别。
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
string inTime = "2015-04-25T23:39:15Z";
DateTime outTime = DateTime.Parse(inTime, ci);
string outTime_string = outTime.ToString("yyyy-MM-ddTHH:mm:ssZ", ci);
// outTme and outTime_string are both 2015-04-26T01:39:15Z
最佳答案
默认情况下,DateTime.Parse
转换为 Local
的“种类”。 (打印出 outTime.Kind
来验证这一点。)所以它知道源是通用的 - 但它正在将它调整为系统本地时间。请注意,文化与时区无关 - 仅与格式和日历系统有关。
您可以通过指定 DateTimeStyles
值来防止这种情况:
DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal);
此时,outTime.Kind
将为 Utc
,并且该值将如预期的那样为 23:39pm。
快速插入:整个 DateTime.Kind
位是一团糟。拥有一个代表三种不同类型值的类型是很糟糕的。你可能想看看我的Noda Time在 .NET 中处理日期/时间的替代方法的项目。
关于c# - 为什么我的时间增加了两个小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528925/