c# - 为什么我的时间增加了两个小时

标签 c# .net

我正在为时间解析而苦苦挣扎。我的输入是以“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/

相关文章:

c# - WPF:TabControl 和动态 TabItems

c# - Razor MVC C#。替换 "."上的 ","

.net - 使用 Ignore.NotFound 延迟加载 NHibernate

.net - 是否有与 XmlWriter.WriteRaw 等效的 XElement?

.net - 安装后程序集依赖关系发生变化

c# - EF 中的 db.SaveChanges() 参数超出范围

c# - 如何将 JSON 数据绑定(bind)到 JQuery 中的复选框

c# - 如何以编程方式从 View 模型中选择 ListView 项?

.net - 为 string() 类型的自动实现属性赋值

c# - X509Chain 的处置