我有一个需要服务器来处理客户端请求的应用程序。
在此应用程序中非常重要。
每当客户端请求任何内容时,我都想保留请求的时间。
问题是,我的服务器位于我们,客户在澳大利亚。
如何将服务器时间更改为客户端时间并将其保存在数据库中。
即使在每日节省时,这也应该是准确的。
我该如何实现这个
好吧,我在数据库中节省了时间。
在客户端,我有此代码
DateTime dt = booking.CreateDateTime.Value;
var localTime = TimeZone.CurrentTimeZone.ToLocalTime(dt);
当我打印该本地时间时,它比本地时间快7个小时。
如何将该时间更改为当地时间?
我知道的指南指出,时间应始终保存在数据库中,从来没有局部。这样,您可以避免许多当地的时间差陷阱(包括节省日光)。
当您需要本地时间时,将其从数据库中检索为UTC并将其转换。您可以使用DateTime Struct来帮助您:
var utcNow = DateTime.UtcNow;
SaveToDB(utcNow);
var utcFromDb = RetrieveTimeFromDb();
var localTime = DateTime.ToLocalTime(utcFromDb);
通常是将日期存储在UTC中,然后在必要时转换为位置。
var date = DateTime.UtcNow();
var tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
var offset = tzi.GetUtcOffset(date);
也许看一下TimeZoneInfo
类?
如果那无法满足您的需求,则有NODA时间。
同意应将时间存储在UTC中。当转换为客户端的本地时间(而不是服务器的)时,问题将出现。要转换为客户的当地时间,您需要知道客户的时区信息并将其与UTC时间存储在DB中。
然后,使用这两种信息,您应该可以使用上述方法将其转换为客户的本地时间。