gpt4 book ai didi

c# - UTC 日期时间转换为本地时间

转载 作者:行者123 更新时间:2023-11-29 05:13:21 27 4
gpt4 key购买 nike

我将数据存储到 MySql 日期时间字段中,并且我总是从 C# 中保存 UTC 日期(使用someDate.ToUniversalTime()).

我在中欧时区。

我有一个日期在 08.03.2016 上保存为 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 时间(如现在),然后应用一些使用用户当前时区的系统转换,并始终从我保存的关于当前 DayLightSaving 状态的 UTC 日期返回正确的本地时间。它还应该返回 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

关于c# - UTC 日期时间转换为本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36493996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com