C# 为什么我的时间增加了两个小时
我在努力解析时间。我的输入是一个以“Z”结尾的时间字符串。我希望是UTC。当我解析这个字符串时,两个小时被添加到结果中。我不知道为什么。使用特定的文化并没有任何区别C# 为什么我的时间增加了两个小时,c#,.net,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,
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
它返回当地时间
:
我建议您解析为DateTimeOffset,而不是DateTime,格式为字符串:
时区是一个真正的难题 它返回本地时间:
:
我建议您解析为DateTimeOffset,而不是DateTime,格式为字符串:
时区是一个真正的难题 默认情况下,
DateTime.Parse
转换为一种“类型”的Local
。(打印出outTime.Kind
以验证这一点。)这样它就知道源代码是通用的,但它正在根据系统本地时间进行调整。请注意,文化与仅时区的格式和日历系统无关
您可以通过指定datetimestyle
值来防止这种情况:
DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal);
此时,outTime.Kind
将为Utc
,该值将如预期的那样为23:39 pm
快速插入:整个
DateTime.Kind
位乱七八糟。拥有一个表示三种不同值的类型是很糟糕的。您可能想在我的项目中寻找在.NET中处理日期/时间的另一种方法。默认情况下,DateTime.Parse
转换为一种“类型”的本地
。(打印出outTime.Kind
以验证这一点。)这样它就知道源代码是通用的,但它正在根据系统本地时间进行调整。请注意,文化与仅时区的格式和日历系统无关
您可以通过指定datetimestyle
值来防止这种情况:
DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal);
此时,outTime.Kind
将为Utc
,该值将如预期的那样为23:39 pm
快速插入:整个DateTime.Kind
位乱七八糟。拥有一个表示三种不同值的类型是很糟糕的。您可能希望查看我的项目,以了解在.NET中处理日期/时间的另一种方法