我来自英国,最近在 WinHost 的Basic Package上部署了一个网站。
DateTime.Now()
在 C# 或SQL 中使用时GETDATE()
,它们都返回类似的东西GMT-8
(因为服务器托管在美国)。
我认为我在服务器上的权限方面有点受限(例如,我无法更改我的 SQL 登录语言)。
在 GMT 中存储这些日期的最佳方法是什么?
我来自英国,最近在 WinHost 的Basic Package上部署了一个网站。
DateTime.Now()
在 C# 或SQL 中使用时GETDATE()
,它们都返回类似的东西GMT-8
(因为服务器托管在美国)。
我认为我在服务器上的权限方面有点受限(例如,我无法更改我的 SQL 登录语言)。
在 GMT 中存储这些日期的最佳方法是什么?
使用DateTime.UtcNow
和存储,因为它是数据库。从数据库读取时假设并使用类UTC
转换为时间。请注意,SQL 不应包含有关时区偏移的任何信息。UK
TimeZoneInfo
在 SqlServer 中使用 getUtcDate() 来存储您的所有日期时间值。您可以在 .NET 应用程序中将其转换为所需的时区。
我认为您应该将 DateTimes 存储在 UTC 中。然后,您可以使用 TimezoneInfo 类简单地将其转换为另一个时区。
DateTime.UtcNow
到您的数据库或getUtcDate
在 sql中使用TimeZoneInfo.ConvertTimeFromUtc
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById(/* destination timezone (users timezone) */);
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(YourDateTimeFromDatabase, cstZone);