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);
我的日期存储在 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);