65.9K
CodeProject 正在变化。 阅读更多。
Home

从 DBA 的角度查看新的 DST 2007

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.14/5 (3投票s)

2007年1月31日

1分钟阅读

viewsIcon

26829

downloadIcon

277

如何检查您的 Microsoft SQL Server 2005 是否已准备好迎接新的 DST 2007。

前导码

由于美国国会在2005年8月通过的《能源政策法案》,从2007年起夏令时将发生以下变化:

之前的夏令时(开始) 新的夏令时(开始) 之前的夏令时(结束) 新的夏令时(结束)
4月的第一个星期日 3月的第二个星期日 10月的最后一个星期日 11月的第一个星期日
2007年4月1日 2007年3月11日 2007年10月28日 2007年11月4日

本文档将向您展示如何检查您的Microsoft SQL Server 2005是否已准备好迎接新的2007年夏令时。

技术详情

托管程序集ConvertTime.dll包含1个存储过程(ufnDisplayUTC)和2个函数(ufnToLTimeufnToUTime),如下所示:

  • ufnDisplayUTC 显示有关当前夏令时信息。例如:
    Timezone: . . . . . . Eastern Standard Time
    New DST for 2007: . . 2007-03-11 02:00 to 2007-11-04 02:00 (01:00:00)
    Current time: . . . . 1/31/2007 11:30:32 AM
    Universal time: . . . 1/31/2007 4:30:32 PM
    UTC offset: . . . . . -05:00:00
    Daylight saving? . . No
  • ufnToUTime(@strDateTime)返回给定本地日期和时间的通用日期和时间。例如:
    select dbo.ufnToUTime('2007-03-11 02:00:00.000')
    --3/11/2007 7:00:00 AM
  • ufnToLTime(@strDateTime)返回给定通用日期和时间的本地日期和时间。例如:
    select dbo.ufnToLTime('2007-03-11 07:00:00.000')
    --3/11/2007 3:00:00 AM

实现

在Microsoft SQL Server Management Studio中针对AdventureWorks等数据库执行以下脚本:

CREATE ASSEMBLY [ConvertTime]
FROM 'ConvertTime.dll'
WITH PERMISSION_SET = SAFE
GO
CREATE FUNCTION [dbo].[ufnToLTime](@strDateTime [nvarchar](4000))
RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER
AS EXTERNAL NAME [ConvertTime].[MCSCS.SQL2005.UserDefinedFunctions].[ufnToLTime]
GO
CREATE FUNCTION [dbo].[ufnToUTime](@strDateTime [nvarchar](4000))
RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER
AS EXTERNAL NAME [ConvertTime].[MCSCS.SQL2005.UserDefinedFunctions].[ufnToUTime]
GO
CREATE PROCEDURE [dbo].[ufnDisplayDST]
AS
EXTERNAL NAME [ConvertTime].[MCSCS.SQL2005.UserDefinedFunctions].[ufnDisplayDST]
GO

测试

如果您的服务器尚未安装新的2007年夏令时补丁,您将观察到以下结果:

select dbo.ufnToUTime('2007-03-11 02:00:00.000')
--3/11/2007 7:00:00 AM
select dbo.ufnToUTime('2007-03-11 03:00:00.000')
--3/11/2007 8:00:00 AM

但是,如果您的服务器已安装新的2007年夏令时补丁,您将观察到以下结果:

select dbo.ufnToUTime('2007-03-11 02:00:00.000')
--3/11/2007 7:00:00 AM
select dbo.ufnToUTime('2007-03-11 03:00:00.000')
--3/11/2007 7:00:00 AM

结论

有关如何为服务器打补丁的更多信息,请查看以下URL:http://www.microsoft.com/windows/timezone/dst2007.mspx

历史

  • 2007年1月31日:初始发布
© . All rights reserved.