最近我一直在处理.net中的时区问题,这是一个时区感知的web应用程序。 我已经想出了以下解决方案来处理时区。
我的解决方案如下:
- 用户的配置文件存储他们所在的时区。
- 在web服务器上进行与UTC的所有转换。
- 将日期以UTC的形式存储在数据库中。
我的问题是:
- 你们认为这是在.NET中最好的方法吗?
- 使用UTC中的datetime2是否足够好,或者我应该将客户端的时间和偏移量一起存储在数据库中(基本上是10-10-2012 4:00:00 vs 10-10-2012 00:00:00 4:00)?
- 顺便提一下,有些人可能会注意到虽然在服务器代码中处理跨DST的跳跃,但是将偏移量传递到SP或类似的DB中不会正确处理DST。有什么想法?
以下是时间转换的示例代码:
private TimeZoneInfo GetTimeZoneInfo()
{
var timeZone = TimeZoneDropdown.SelectedValue;
switch (timeZone)
{
case "Eastern":
return TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
case "Central":
return TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
case "Mountain":
return TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");
case "Pacific":
return TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
case "Alaskan":
return TimeZoneInfo.FindSystemTimeZoneById("Alaskan Standard Time");
}
return TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
}
public DateTime ConvertLocalDateTimeToUtc(DateTime dateTime)
{
var timeZone = GetTimeZoneInfo();
return TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified), timeZone);
}
public DateTime ConvertUtcToLocalDateTime(DateTime dateTime)
{
var timeZone = GetTimeZoneInfo();
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.SpecifyKind(dateTime, DateTimeKind.Utc), timeZone);
}