4

我有一个应用程序需要服务器来处理客户端请求。

在这个应用程序中,时间非常重要。

每当客户请求任何东西时,我都想节省请求的时间。

问题是,我的服务器在美国,客户端在澳大利亚。

如何将服务器时间更改为客户端时间并将其保存在数据库中。

即使在夏令时,这也应该是准确的。

我怎样才能做到这一点

好的,我已将数据库中的时间保存为 UTC。

在客户端我有这个代码,

 DateTime dt = booking.CreateDateTime.Value;
 var localTime = TimeZone.CurrentTimeZone.ToLocalTime(dt);

当我打印本地时间时,它比本地时间快 7 小时。

我怎样才能把那个时间改成当地时间?

4

4 回答 4

4

我知道的指导方针指出,时间应始终保存为数据库中的 UTC,而不是本地时间。这样可以避免许多本地时差陷阱(包括夏令时)。

当您需要本地时间时,从数据库中将其检索为 UTC 并进行转换。您可以使用 DateTime 结构来帮助您解决这个问题:

var utcNow = DateTime.UtcNow;
SaveToDB(utcNow);
var utcFromDb = RetrieveTimeFromDb();
var localTime = DateTime.ToLocalTime(utcFromDb);
于 2012-11-03T16:33:04.423 回答
0

通常最好的做法是在 UTC 中存储日期,然后在必要时转换为区域设置。

var date = DateTime.UtcNow();
var tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
var offset = tzi.GetUtcOffset(date);
于 2012-11-03T16:33:24.670 回答
0

也许看看TimeZoneInfo

如果这不能满足您的需求,那就是Noda Time

于 2012-11-03T16:33:37.743 回答
0

同意时间应以 UTC 格式存储。转换为客户端的本地时间(而不是服务器的)时会出现问题。要转换为客户端的本地时间,您需要知道客户端的时区信息并将其与 UTC 时间一起存储在数据库中。

然后使用这两条信息,您应该能够使用上述方法转换为客户端的本地时间。

于 2012-11-03T17:07:40.947 回答