时间转换为客户端时间c#

时间:2012-11-03 16:28:07

标签: c# datetime timezone

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

在这个申请中,时间非常重要。

每当客户请求任何内容时,我都希望节省请求的时间。

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

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

即使在白天节电期间也应该准确。

我怎样才能实现这个目标

好的,我在数据库中节省了UTC时间。

在客户端,我有这个代码,

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

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

如何将时间更改为当地时间?

4 个答案:

答案 0 :(得分:4)

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

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

var utcNow = DateTime.UtcNow;
SaveToDB(utcNow);
var utcFromDb = RetrieveTimeFromDb();
var localTime = DateTime.ToLocalTime(utcFromDb);

答案 1 :(得分:0)

通常最佳做法是以UTC格式存储日期,然后在必要时转换为区域设置。

var date = DateTime.UtcNow();
var tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
var offset = tzi.GetUtcOffset(date);

答案 2 :(得分:0)

也许看看TimeZoneInfo class

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

答案 3 :(得分:0)

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

然后,使用上述两种方法,您应该能够使用上述方法转换为客户的当地时间。