data_center

2015年07月01日はうるう秒が追加される



2015年07月01日にうるう秒が追加されます。
2月29日が増えて1年が1日多い「うるう年」がありますが、23:59:60で1秒多い「うるう秒」というものが存在するのです。
正確にはGMT標準時間の0時に追加されるので日本では「08:59:60」となります。
このうるう秒ですが放置しておくとシステムに不具合を表示させる原因になります。

Wikipedia:閏秒

システムへの影響

各システム上、DBに時間を入れようとすると秒の値は0~59秒までサポートしており、秒の値に60秒が入ってしまうとエラーになったりしてしまう可能性があります。
また、プログラム言語等によっては60になると繰り上がることもあるので問題になってしまいます。
PHP例:2015/06/30のデータなのに2015/07/01になってしまう。
<?php
$datetime = '2015/06/30 23:59:60';
echo date('Y/m/d H:i:s', strtotime($datetime));
?>
結果
2015/07/01 00:00:00
以前、記事にした「PHP strtotimeの落とし穴」の現象が起こってしまいます。

そのため、うるう秒のサーバーに対策が必要になります。

各システムの対応

Windows
60秒を挿入しない対応のようです。

Mysql
60秒は挿入させないが、timestamp型のみ挿入可能。
ただし、検索を行う時は23:59:59で検索を行わないといけない。

■Linux
nptdをslewモードで動かす。

緩やかな時刻同期を実行するntpdの起動モード。
1秒間のズレを約2000秒(33分)かけて修正する。

slewモードで動くntpdはうるう秒そのものは無視して、1秒先に進む。
緩やかに挿入後の時間に同期していく。
今のところOSやアプリケーションに影響を与えない対策としてslewモードへの移行が推奨されてる。
ntpdは以前のものだとslewモードが動かないバグがあるらしいので出来るだけ最新を入れることをおすすめします。

うるう秒の対策は上記の例で出した現象が存在するので、プログラムだけでは無理なようです。
Windowsでは対策不要な感じですね。
Linuxの場合は各自対応しないとシステム障害が発生する可能性が高いです。
ただ、オープンなシステム出ない場合はその時間使わないようにアナウンスするだけでも済むかもしれませんね。
明日なのに今更ですね。


コメントを残す