繁体   English   中英

UTC日期时间转换为当地时间

[英]UTC datetime conversion to local time

我将数据存储到MySql datetime字段中,我一直在保存C#的UTC日期(使用someDate.ToUniversalTime() )。

我在中欧时区。

我有一个日期在2016年4月8日保存为2016-04-07 16:00:00(当时事件设置在当时),本次活动的正确当地时间是2016-04-07 17:00: 00,因此当时保存为GMT + 1。 我使用someDate.ToLocalTime()来获得正确的本地时间,并且效果很好。

今天(4月),由于3月底发生的DayLight事件我们有GMT + 2偏移现在someDate.ToLocalTime()显示我多1小时:2016-04-07 18:00:00这是不正确的。

如何普遍解决这个问题? 我想保存UTC时间(现在),然后应用一些使用用户当前时区的系统转换,并始终从我保存的UTC日期返回有关当前DayLightSaving状态的正确本地时间。 它也应该返回2016-04-07 17:00:00而不是2016-04-07 18:00:00

您的假设是错误的:2016-04-07 16:00 UTC在中欧时区的有效当地时间始终是2016-04-07 18:00,而且从未是2016-04-07 17:00。 您必须始终根据您查看的日期计算UTC偏移,而不是当前日期。

请尝试以下代码。 无论您当前的日期如何(即您当前是否处于白天),它始终会打印相同的值

var dt1 = new DateTime(2016, 3, 1, 15, 0, 0, DateTimeKind.Utc);
var dt2 = new DateTime(2016, 5, 1, 15, 0, 0, DateTimeKind.Utc);

var s1 = dt1.ToLocalTime().ToString("s");
var s2 = dt2.ToLocalTime().ToString("s");

Console.WriteLine(s1);  //prints 2016-03-01T16:00:00  because GMT+1 at that date
Console.WriteLine(s2);  //prints 2016-05-01T17:00:00  because GMT+2 at that date

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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