[英]How to parse the date and time depends upon the time zone?
我想将字符串解析为时间。
string inputDate = "1970-01-01T00:00:00+0000";
var dt = DateTime.Parse(inputDate, CultureInfo.InvariantCulture);
Console.WriteLine("Date==> " + dt);
在印度时间( UTC +5.30
)工作正常。
但是当我在模拟器的设置中将时区更改为UTC -5
时,输出显示
12/31/1969 7:00:00 PM
当我更改设置中的时区时,日期应该相同。 请帮助我解决我的问题。
让我解释一下这里发生了什么。
通常 , Unspecified
DateTime.Parse
方法返回的DateTime
的Kind
属性。
但是,因为您的字符串具有时区信息,并且您使用的DateTime.Parse
方法没有DateTimeStyles
重载(默认情况下使用DateTimeStyles.None
),所以DateTime
的Kind
属性将是Local
。
这就是为什么当您在UTC +05.30
时区系统中使用代码时,会生成类似以下结果的原因;
01/01/1970 05:00:00 AM
当您在UTC -05.00
时区系统中使用时,它将生成;
12/31/1969 7:00:00 PM // which is equal 12/31/1969 19:00:00 AM representation
这太正常了。
当我更改设置中的时区时,日期应该相同。
在这种情况下,将您的DateTime
更改为UTC是最佳选择。 使用ToUniversalTime()
方法是在Local
时间执行此操作的一种方法。
从文件;
协调世界时(UTC)等于当地时间减去UTC偏移量。
由于您的代码生成了Local
时间,因此您的ToUniversalTime()
生成的日期时间在两个时区都相同。
另一种方法是使用DateTimeStyles.AdjustToUniversal
作为DateTime.Parse
方法中的第三个参数。
从文件;
日期和时间作为世界标准时间(UTC)返回。 如果输入字符串表示本地时间,则通过时区说明符或AssumeLocal将日期和时间从本地时间转换为UTC 。 如果输入字符串表示UTC时间,则通过时区说明符或AssumeUniversal,将不会发生任何转换。 如果输入字符串不表示本地时间或UTC时间,则不会进行任何转换,并且结果Kind属性为Unspecified。
string inputDate = "1970-01-01T00:00:00+0000";
var dt = DateTime.Parse(inputDate,
CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal);
这将生成01/01/1970 00:00:00
, Kind
为Utc
。
最终解决方案
string givenDate = ("1970-01-01T00:00:00+0000");
DateTime d = DateTime.Parse(givenDate, System.Globalization.CultureInfo.InvariantCulture);
string ouputDate = d.ToUniversalTime().ToString("MMM d, yyyy h:m:s tt", System.Globalization.CultureInfo.InvariantCulture);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.