首先让我设置一下senario:
Datetime始终存储在EST中的数据库中。我需要将其转换为客户端时区或从客户端时区转换为服务器时区。
客户时区在请求时已知。因此,在阅读/谷歌搜索之后,我觉得我所带来的解决方案是不够的,或者我觉得它有点hackish。
代码如下:
public static class TimeZoneUtility
{
static readonly TimeZoneInfo serverTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
public static DateTime ConvertToServerDateTime(DateTime clientTime, TimeZoneInfo clientTimeZone)
{
clientTime = DateTime.SpecifyKind(clientTime, DateTimeKind.Unspecified);
DateTimeOffset clientDateTimeOffset = new DateTimeOffset(clientTime, clientTimeZone.GetUtcOffset(clientTime));
DateTimeOffset serverDateTimeOffset = TimeZoneInfo.ConvertTime(clientDateTimeOffset, serverTimeZone);
return serverDateTimeOffset.DateTime;
}
public static DateTime ConvertToClientDateTime(DateTime serverTime, TimeZoneInfo clientTimeZone)
{
DateTimeOffset serverTimeOffset = new DateTimeOffset(serverTime, serverTimeZone.GetUtcOffset(serverTime));
DateTimeOffset client = TimeZoneInfo.ConvertTime(serverTimeOffset, clientTimeZone);
return client.DateTime;
}
}
我已经阅读了以下答案,并在之后对解决方案进行了建模。 (Having problems with converting my DateTime to UTC)
有没有人发现下面的解决方案有问题?请注意我必须使用DateTime.SpecifyKind(clientTime, DateTimeKind.Unspecified)
故意重新创建客户端时间,因为类型是本地并且它正在抛出异常。
如果您发现问题,请说明并建议解决方法。
谢谢,