不确定如何正确转换为DateTimeOffset

时间:2013-06-18 15:02:30

标签: sql-server-2008 tsql

我们有一个包含DateTime2(7)列的表,我们正在尝试从该列中获取值并将它们插入到另一个表中,该表的相应列数据类型为DateTimeOffset。源日期看起来像这样:

2013-02-28 00:15:49.8270000
2013-03-11 00:26:38.1270000

我们希望他们转换成这样(假设东部标准时间 - 时间在3月10日前进一小时。)

2013-02-28 00:15:49.8270000 -05:00
2013-03-11 00:26:38.1270000 -04:00

我不确定如何告诉SQL Server获取源日期,并根据该日期和时间,使用EST时区将其转换为在该日期和时间生效的正确DateTimeOffset。 / p>

我知道ToDateTimeOffset函数,但是,如果我理解正确,我必须为该函数提供偏移值。我希望SQL Server根据我提供的时区(例如,EST)来解决这个问题。

1 个答案:

答案 0 :(得分:1)

这应该与SQLCLR相当简单。假设时区总是EST,那么这样的事情应该有效:

using System;
using Microsoft.SqlServer.Server;

namespace SqlUtilities
{
   public static class Dates
   {
      private static readonly TimeZoneInfo EST = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

      [SqlFunction(
         Name = "ToDateTimeOffset",
         DataAccess = DataAccessKind.None,
         IsDeterministic = true,
         IsPrecise = true
      )]
      public static DateTimeOffset? ToDateTimeOffset(DateTime? value)
      {
         if (value == null) return null;

         var source = value.Value;
         var offset = EST.GetUtcOffset(source);
         return new DateTimeOffset(source, offset);
      }
   }
}