作者:玉乔嘉芸孟峰 | 来源:互联网 | 2023-02-01 12:59
我正在努力解决时间问题.我的输入是以"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
Jon Skeet..
7
默认情况下,DateTime.Parse
转换为"种类" Local
.(打印出来outTime.Kind
以验证它.)因此它理解源是通用的 - 但它正在将其调整为系统本地时间.请注意,文化与时区无关 - 仅与格式和日历系统有关.
您可以通过指定DateTimeStyles
值来防止这种情况:
DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal);
那时,outTime.Kind
将是Utc
,并且价值将是预期的23:39 pm.
快速插头:整DateTime.Kind
点都是一团糟.有一种代表三种不同价值的类型是很糟糕的.您可能希望查看我的Noda Time项目,了解.NET中日期/时间处理的替代方法.
1> Jon Skeet..:
默认情况下,DateTime.Parse
转换为"种类" Local
.(打印出来outTime.Kind
以验证它.)因此它理解源是通用的 - 但它正在将其调整为系统本地时间.请注意,文化与时区无关 - 仅与格式和日历系统有关.
您可以通过指定DateTimeStyles
值来防止这种情况:
DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal);
那时,outTime.Kind
将是Utc
,并且价值将是预期的23:39 pm.
快速插头:整DateTime.Kind
点都是一团糟.有一种代表三种不同价值的类型是很糟糕的.您可能希望查看我的Noda Time项目,了解.NET中日期/时间处理的替代方法.