C# Datetime 增加了 3 小时

C# Datetime is increasing by 3 hours

我的日期存储在 sql 服务器中。

Windows 服务器区域和时区是正确的,但是当我看到数据库中的日期增加了 3 小时时,我认为它来自某些覆盖的服务器配置,但不知道在哪里其他看。

当我将日期从本地项目发送到生产数据库时,它保存正确,但当我使用生产网站时它没有。

我还应该检查哪里来解决这个问题?

这取决于代码库 运行 您的生产门户。

将日期时间用作 utc 并相应地满足它。或添加 DatetimeOffset 并在需要时计算差异。

如果您仍然有重构的余地,我建议您稍微深入研究一下日期和时间处理,对其有深入的了解,然后相应地编写代码,这样它就不会在后期阶段或用法。

问题出在负载均衡的某些机器上,有好几台机器是从一个镜像创建的,原来是正确的,但副本不是,如果我多次尝试保存注册表,那么我就是这样重定向到具有正确配置的机器,然后记录以正确的日期保存。

我刚刚要求 devops 更正其他机器上的设置。

如果您想利用本地计算机时区,您可以使用 myDateTime.ToUniversalTime() 从您的本地时间获取 UTC 时间或使用 myDateTime.ToLocalTime() 将 UTC 时间转换为本地机器的时间。

// convert UTC time from the database to the machine's time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var localTime = databaseUtcTime.ToLocalTime();

// convert local time to UTC for database save
var databaseUtcTime = localTime.ToUniversalTime();

如果您需要将时间 from/to 转换为其他时区,您可以使用 TimeZoneInfo.ConvertTime() 或 TimeZoneInfo.ConvertTimeFromUtc()。

// convert UTC time from the database to japanese time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var japaneseTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
var japaneseTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, japaneseTimeZone);

// convert japanese time to UTC for database save
var databaseUtcTime = TimeZoneInfo.ConvertTimeToUtc(japaneseTime, japaneseTimeZone);