3

我来自英国,最近在 WinHost 的Basic Package上部署了一个网站。

DateTime.Now()在 C# 或SQL 中使用时GETDATE(),它们都返回类似的东西GMT-8(因为服务器托管在美国)。

我认为我在服务器上的权限方面有点受限(例如,我无法更改我的 SQL 登录语言)。

在 GMT 中存储这些日期的最佳方法是什么?

4

3 回答 3

4

使用DateTime.UtcNow和存储,因为它是数据库。从数据库读取时假设并使用类UTC转换为时间。请注意,SQL 不应包含有关时区偏移的任何信息。UKTimeZoneInfo

于 2012-04-25T08:51:36.293 回答
3

在 SqlServer 中使用 getUtcDate() 来存储您的所有日期时间值。您可以在 .NET 应用程序中将其转换为所需的时区。

于 2012-04-25T08:51:26.750 回答
2

描述

我认为您应该将 DateTimes 存储在 UTC 中。然后,您可以使用 TimezoneInfo 类简单地将其转换为另一个时区。

  • 保存DateTime.UtcNow到您的数据库或getUtcDate在 sql中使用
  • 让用户选择他的时区并将它们保存到您的数据库中
  • 使用将您保存的 UTC 时间转换为用户时区TimeZoneInfo.ConvertTimeFromUtc

样本

TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById(/* destination timezone (users timezone)  */);
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(YourDateTimeFromDatabase, cstZone);

更多信息

于 2012-04-25T08:51:28.500 回答