繁体   English   中英

如何解析日期和时间取决于时区?

[英]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方法返回的DateTimeKind属性。

但是,因为您的字符串具有时区信息,并且您使用的DateTime.Parse方法没有DateTimeStyles重载(默认情况下使用DateTimeStyles.None ),所以DateTimeKind属性将是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:00KindUtc

最终解决方案

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM