我有一个需要服务器来处理客户端请求的应用程序。
在这个申请中,时间非常重要。
每当客户请求任何内容时,我都希望节省请求的时间。
问题是,我的服务器在美国,客户在澳大利亚。
如何将服务器时间更改为客户端时间并将其保存在数据库中。
即使在白天节电期间也应该准确。
我怎样才能实现这个目标
好的,我在数据库中节省了UTC时间。
在客户端,我有这个代码,
DateTime dt = booking.CreateDateTime.Value;
var localTime = TimeZone.CurrentTimeZone.ToLocalTime(dt);
当我打印localTime时,它比当地时间快7小时。
如何将时间更改为当地时间?
答案 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时间一起存储在数据库中。
然后,使用上述两种方法,您应该能够使用上述方法转换为客户的当地时间。