うるう秒に関するサポートについて

適用対象: Microsoft Windows Server 2003 Standard Edition (32-bit x86)Microsoft Windows Server 2003 Standard x64 EditionMicrosoft Windows Server 2003 Enterprise Edition (32-bit x86)

概要


うるう秒に関するサポートについてご案内いたします。 

詳細




 (1) Windows について

OS において

Windows オペレーティングシステムでは、うるう秒の処理をおこないません。
たとえば、「yyyy/mm/dd 08:59:60」の年月日時刻情報につきましては、Windows OS ではサポートしていません。
このため、たとえば「2012/7/1 08:59:60」は「2012/7/1 09:00:00」として処理されます。



時刻同期サービス (Windows Time サービス)  において

技術情報 (KB 909614) に記載のとおり、Windows Time サービスでは、うるう秒を意識して動作していません。
NTP サーバーよりうるう秒実施予告情報(*1) を受信した場合であってもWindows 時刻同期サービス (W32Time) は、うるう秒を挿入する動作を行わず通常通りの時刻同期処理を進めます。
(*1) うるう秒実施予告情報は Leap Indicator (LI) と呼ばれる情報に値が設定され、 "01" に設定されている場合、うるう秒であることを示します。
詳細につきましては、以下の技術情報 (KB 909614) を参照してください。

文書番号:909614
タイトル: うるう秒に関する Windows タイム サービスの処理
URL: http://support.microsoft.com/kb/909614/ja

なお、うるう秒が発生した瞬間は、うるう秒を対応している NTP サーバーに対して、1 秒の時刻差異が生じますが、その後の時刻同期にて正常な時刻に補正されます。
Windows Time サービスの時刻同期のしくみについては、技術情報 (KB 2722681) を参照してください。

文書番号:2722681
タイトル: Windows Time サービスにおける時刻同期の仕組み
URL: http://support.microsoft.com/kb/2722681


また、Windows Time サービスにおいては、設計上、1 秒などの僅差の時刻差異を発生させないように常に保つことはできません。
OS からの観点としては 1 秒のずれが生じた場合でも動作に影響はありません。
詳細については、技術情報 (KB 939322) を参照してください。

文書番号:939322
タイトル: 高精度の環境に向けた Windows タイム サービスの構成を目的とするサポート範囲
URL: http://support.microsoft.com/kb/939322


クラスタサービスにおいて 
クラスタ構成におきましても OS の基本動作と同じく、うるう秒を意識して動作していません。
 

(2) SQL Server 2000200520082008 R22012、2014 について
SQL Serverは、トランザクションなど内部で使用する情報の管理に時刻を使用していません。そのため、うるう秒に伴うシステム時刻のズレ(1秒間)が発生したとしても、それが SQL Serverの動作自体に影響を与えることはありません。
Windows オペレーティングシステム (OS) がうるう秒を意識していないのと同様に、SQL Serverもうるう秒を意識して動作していません。

なお、datetime などの日付データ型は、2012/7/1 08:59:60 というような、秒の部分が60になる時刻には対応していないため、うるう秒に対応している OS 上で動作するアプリケーションから SQL Server に接続し、日付データ型の列や変数にうるう秒 (秒が"60"となるデータ) を設定しようとするとエラーが発生します。
詳細につきましては、下記「参考情報」をご参照ください。 

参考情報

[例] SQL Server でうるう秒を日付データ型として扱った場合

create table leap_second(
a int,
b datetime,
)
go
insert into [leap_second] values (1,convert(datetime,'2012/07/01 08:59:60'))
go
select convert(datetime,'2012/07/01 08:59:60')
go
select datediff(day,convert(datetime,'2012/07/01 08:59:60'),getdate())
go

declare @b datetime
set @b='2012/07/01 08:59:60'
go
declare @c time
set @c='08:59:60'
go
declare @d datetime2
set @d='2012/07/01 08:59:60'
go
declare @e datetimeoffset
set @e='2012/07/01 08:59:60'
go


結果
メッセージ242、レベル16、状態3、行1
varchar データ型からdatetime データ型への変換の結果、範囲外の値になりました。
ステートメントは終了されました。

メッセージ242、レベル16、状態3、行1
varchar データ型からdatetime データ型への変換の結果、範囲外の値になりました。

メッセージ242、レベル16、状態3、行1
varchar データ型からdatetime データ型への変換の結果、範囲外の値になりました。

メッセージ242、レベル16、状態3、行3
varchar データ型からdatetime データ型への変換の結果、範囲外の値になりました。

メッセージ241、レベル16、状態1、行2
文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。

メッセージ241、レベル16、状態1、行2
文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。

メッセージ241、レベル16、状態1、行2
文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。



(3)  Exchange Server 200320072010、2013 について

Exchange で使用されている時刻には、システム クロックを使用しているものと、サービスが起動してからの経過時間を計算しているものがあります。システム クロックを使用する処理では、Exchange Server はうるう秒を意識することなく動作します。一方、経過時間に関しましては、うるう秒の挿入により実際の時刻と 1 秒のずれが生じますが、通常時でも起こり得る範囲のずれですので、Exchange Server の動作に影響はありません。

内部動作とは別に、外部からうるう秒を加味した時刻を受け取る可能性がある例として iCalendar 形式の予定がありますが、Exchange Server が iCalendar 形式の予定を受信する際、時刻の表記は RFC5545 に定義されている形式のみをサポートします。うるう秒を考慮した秒の表記は 0 から 60 までがサポートされ、それ以上の秒数が記述されている場合は不正な形式として処理され、正しい iCalendar 形式とは見なされません。

Outlook につきましては、60 秒の場合は 0 とみなしますので、2012/07/01 08:59:60 は、2012/07/01 08:59:00 となり、最大で 1 分のずれが生じる可能性がございます。
メールの受信の順番がずれて見える可能性がございますが、動作に影響はありません。

参考情報
2.2.36 [RFC5545] Section 3.3.12 Time
http://msdn.microsoft.com/en-us/library/ee624459(v=exchg.80).aspx

 
(4)IIS について
IISにおいて、うるう秒による影響はありません。


(5) その他
Windows 上で動作するアプリケーションは、通常システムクロックを使用しますので、うるう秒を意識せずそのまま使用することが可能です。
ただし、独自で時間を管理し、うるう秒に対応しているアプリケーションがある場合や、うるう秒に対応したOS上で動作するアプリケーションがあり、それらアプリケーションからマイクロソフト製品にアクセスする場合には、マイクロソフト製品がうるう秒を意識していないことに起因した問題が発生する可能性があるため、注意が必要です。