閏秒(うるうびょう)2008-12-31

2009年1月1日に閏秒が挿入されます。これによりシステムにどんな影響があるか少し調べてみました。

関連用語

  • 国際原子時(TAI)

約300個の原子時計の加重平均によって維持される時刻。協定世界時の基礎となる国際標準。略語はTemps Atomique International(フランス語)の略。閏秒は含みません。1958/1/1 00:00:00スタート。

  • 世界時(UT)

地球の自転に基づいて決められる世界共通の時刻。略語はUniversal Timeの略。UT0からUT2まであります。

    • UT0:地方平均恒星時と観測位置から求まる時刻。
    • UT1:UT0 から地球の極運動を補正したもの。単にUTといえば大抵これです。
    • UT2:UT1 から季節変動を補正したもの。
  • 協定世界時(UTC)

TAIを基にUTとの誤差が1秒未満になるように維持されている世界共通標準時。閏秒が挿入されるのはこの時刻。英語ではCoordinated Universal Timeですが、ITUが各国での略語を統一するためUTCと決めたらしいです。1972/1/1 0:0:0にTAI-10でスタート。

  • UNIX time

1970/1/1 00:00:00からの累積秒数。日付に変換する場合、POSIX標準では閏秒は考慮ません。最近では、タイムゾーン情報に閏秒実施データが含まれていれば、閏秒を考慮してUTCに対応させることができます。この場合、同じUNIX timeでもPOSIX標準のシステムと表している時刻が異なるので、システム内でどちらかに統一しておいた方がよいです。

  • NTP time

1900/1/1 00:00:00からの累積秒数。日付に変換する場合閏秒を考慮しません。

閏秒が挿入されるとどうなる?

  • UTC

2008/12/31 23:59:60が追加されます(日本では08:59:60)。これによりUTC-TAIの値が1つ増加します。

  • UNIX time

POSIX標準の場合閏秒は考慮しないので、何もしなければ1秒進んでしまいます。UTC対応システムで、タイムゾーン情報に閏秒実施データが含まれていればUTCとの同期は保たれます。

  • NTP time

前日の2008/12/31 00:00:00からNTPパケットの中のLI(Leap Indicator)が"01"になり閏秒の予告が始まります。2009/01/01 00:00:00のときは、2008/12/31 23:59:60と同じ値で、LIが"00"に戻ります。

参照しているNTPサーバが閏秒に対応していないと、上記の動作はおこなわれません(LIがセットされない)。また、使用しているNTPクライアント(ntpd等)が閏秒に対応していないと、LIがセットされてもさくっと無視されます。

具体的には?

システム時計が未対応の場合

閏秒挿入時にシステムの時刻がUTCより1秒進むことになります。POSIX標準のUNIXやWindowsがこれに該当します。

しかし、NTPで同期を取っていれば、そのうち1秒進んでいることに気付いて調整されるはずです。一瞬たりとも時間のズレが許されないようなシステムでもなければ影響は少ないです。ちなみにWindowsは少なくともXPまでは、システム時計、NTPクライアント/サーバすべて閏秒に未対応のようです(Server 2008やVISTAについては未確認)。

この場合、NTP クライアントがstepモードで実行されていると、時刻戻りが起こる可能性があり、時刻指定で起動するプログラムが複数回実行される恐れがあります。これを防ぐにはNTPクライアントをslewモード(1秒の間隔を調整してじわじわ時刻をあわす)にしておきます。

システムが閏秒に対応している場合

2008/12/31 23:59:60(UTC)をとります。時刻をDBMS等に記録している場合、この時刻が記録される可能性があります。プログラムやDBMSが閏秒に対応していない(秒は0~59秒しか取らないものとしている)場合、この時刻うまく扱えずにエラーとなるおそれがあります。

結局どうすれば?

1秒も狂わせたくない場合は、システム、ミドルウェア、NTPクライアント、参照するNTPサーバのすべてを閏秒に対応させる必要があります。

それほどシビアでなければ、システム時計を「非対応」にしておき、NTPクライアントで修正させれば十分だと思います。ある時刻の解釈でズレが生じる可能性があるので、システム時計以外も「非対応」に統一しておいたほうが安全です。

参考

以下のページを参考にさせていただきました。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://hiroro.asablo.jp/blog/2008/12/31/4035946/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。