C#TimeZoneInfo / DateTimeoffset / DateTime转换

时间:2015-03-12 03:48:58

标签: c#

首先让我设置一下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)故意重新创建客户端时间,因为类型是本地并且它正在抛出异常。

如果您发现问题,请说明并建议解决方法。

谢谢,

0 个答案:

没有答案