SlideShare a Scribd company logo
サマータイムとうるう秒と
2038年問題
~時間が情報システムに与える影響~
立命館大学情報理工学部 上原哲太郎
2018.9.29 LOCAL Developer Day@札幌
サマータイム(夏時間)とは
• 夏の長い日照時間を活用するため
夏に「時計を早める」制度(普通は1時間)
• 主な目的は「節電」「省エネ」
•元々第一次大戦中の燃料節約がきっかけで広がる
• 国連加盟国の1/3で実施(60カ国)
• G7で現在実施していないのは我が国だけ
主に北米と欧州で実施
By Paul Eggert CC-BY-SA-3.0, via Wikimedia Commons
実施中
過去に
実施
実施経験
なし
日本におけるサマータイム
• 戦後1948年にGHQの指導で実施
しかし1952年には廃止
•当時の新聞を見ると・・・
読売新聞
1950.4.27
夕刊より
読売新聞DB
繰り返す導入論
• 高度成長期:エネルギー不足で導入論が高まる
• 1990年代から繰り返す…日経見ると
• 1995年3月4日
「サマータイム、立法化の動き強まる」
• 1999年2月23日
「参院の超党派議連、サマータイム2001年度導入、議員立法提出へ。」
• 2001年4月18日
「サマータイム、2003年導入へ、環境省、法案を来年提出」
• 2004年9月25日
「サマータイム法案提出へ。」
• 2005年4月27日
「サマータイム法案、今国会に提出へ――自公が合意、2007年導入めざす。」
• 2008年5月30日
サマータイム「10年導入を」、超党派で法案提出へ、省エネ・経済効果見込む。
• 2008年は本当に提出されそうだった
転機:2008年6月10日
• 元衆議院議員 早川忠孝氏の回顧
http://blogos.com/article/318442/
•自民党緊急政調全体会議が開催され
サマータイム法案が審議、提出寸前に
•しかし民主党篠原孝議員の手紙が情勢を変える
• 『サマータイムは「時刻の切り替え」ではなく「頭の切り替え」で』
• 『我々政治家は、国民が望んでおらず、大して役に立つわけでもない
「おせっかい政治」は慎むべきです。』
•これで拙速な導入論が見送られることに
しかし蘇る導入論:
東日本大震災直後の経団連緊急提言
当時の私のつぶやき…
2011年に論点全部出てる…
特需論にクギ
NTP万能という誤解
NTPこそ問題
組み込みヤバいよ
海外では出来てるのに?論
それ「経済効果」ちゃう!
余談:2014年軽減税率論の際も…
オリパラで蘇るサマータイム導入論
• 7月28日組織委
「20年に限ってでも良いので
サマータイムを導入する法改正を
検討して欲しい」
• 8月7日組織委
「19年20年に限って2時間の
サマータイムを検討して欲しい」
→首相が党に検討指示
伝えられてたサマータイム案
• 6月最初の週末から8月最後の週末まで
• 2時間繰り上げ
• 例えば2019年実施なら…
•2019年6月2日(日)午前2時になると
午前4時に2時間飛ばす
•2019年9月1日(日)午前4時になると
午前2時までもう一度戻る
• よって9月1日2時~4時は2回繰り返す
9月1日3時、さてどっち?
導入効果:メリット・デメリット
• メリット
• オリンピック競技の暑さ対策??
• 節電&省エネ効果?CO2削減?
• 経済効果??
• 第一生命経済研究所の永浜利広首席エコノミストの試算
「個人消費が押し上げられ、年7000億円の経済効果」
• システム改修も経済効果?
• デメリット
• 社会的混乱?健康被害?
• システム改修による負担?影響??
あまり議論
されてない
前回の試算
• 地球環境と夏時間を考える国民会議
報告書(1999)の試算
•ハードウェア・ソフトウェアあわせて
1000億円程度(各省庁・業界ヒアリング積算)
•必要な周知期間・準備期間は2年程度
• 2年の根拠?!
•航空業界「IATAでの調整に2年程度」
•ソフトウェア業界「今は2000年問題対応で
手が回らないので2000年以降にして」
何年かかると
言ってない
サマータイム
推進論の主な根拠
いや、今は2年でも無理では?
• 「時計の自動設定」を行う機器が格段に増えた
• 1999年長波JJY開始 2006年NICT NTPサービス開始
• さらに、今はまさにIoT時代ではないか!
• 「時計の自動設定」技術的に意味するところが
理解されていないのでは?
• 時計は協定世界時を自動設定し機器側が時差を足す
=機器側のソフト修正なしにサマータイム対応は不可能
• ソフトがネット修正可能な機器ばかりではない
• サマータイムに対応したアプリ開発を
理解できないプログラマは多そう…
• 教育からやらなくちゃいけないんじゃないの??
こらあかん
2018年8月10日 アレを出す
…そしてバズる。
主な主張
• インフラ更新は4~5年欲しい
• ソフト更新も大規模なら3年欲しい
• 家電などで対応不能で修正か交換する
必要がありそうなので国民負担発生
• それを避けるなら10年待つべき
• 経済被害はインフラ3000億
全体では兆単位
• イノベーションに充てるべき人材を
サマータイム対応で使い潰すな!
マスコミ出演がんばりました
• ラジオ、テレビ、新聞、週刊誌…
• テレ朝 羽鳥慎一モーニングショー
• NHKニュース9、東京ローカル、朝のニュース
• BS11「報道ライブ インサイドOUT」
• よみうりテレビ「正義のミカタ」
• 日経読売毎日朝日/週刊ポスト・プレイボーイ
• 9月2日 情報法制研究所で企画
「サマータイム導入における
ITインフラへの影響に関するシンポジウム」
• 多数のWeb媒体で報告される
朗報!
• 2018年9月28日
朝日新聞朝刊1面
自民党は
議員連盟を
研究会に格下げ
27日第1回会合で
異論が出て…
公明党も
反対を表明
最大の収穫
• 朝日、共同通信、NHKの報道によると
遠藤運営委員長:
「気持ちは(導入)したいが、
物理的にシステムの問題や、
世論の反応を見ると、
なかなかそこは難しい」
そう!それ!
システムの問題!
大勝利!
ご清聴ありがとう
ございました
……あのサマータイム騒動が
最後の一匹だとは思えない…
もし
推進運動が続けて
行われるとしたら、
あの
サマータイムの
同類が、
また国会の
どこかへ
現れてくるかも
しれない…
2018.9.28毎日新聞
ちょっとまて。
• 日本でのサマータイム導入は
コストを上回るメリットはないだろう
• しかし我々は今後世界で戦うべき
• 日本でサマータイムが導入されないと
しても開発者としては…
ちゃんと世界でソフトウェアを作っている
企業なら、とっくに対応していて当たり前
のこと。本来ならば、夏時間導入でこれだ
け大騒ぎになるのは恥ずべき状況だと思う
国際大学GLOCOM
楠正憲氏情報法制研究所サマータイムシンポジウムにて
欧米人でもミスるのです
Githubで
DST issueや
“Daylight
Saving Time”
“Summer Time”
で探すと
いっぱい
見つかる…
DST issue
約5万件
“Summer Time”
約5千件
サマータイム対応のために
• 時刻合わせ
• システムに入ってくる時刻供給源を全部洗い、
正しく設定されるか確かめる必要
• タイムゾーン更新と設定(OS時刻)
• アプリケーションでの対応
• 夏時間でも現地時間を取得できるか
• 年2回の夏時間移行日に正しく動くか
• データの健全性(特に通信電文)
• DB内に書かれている時刻は日本時想定?
• 電文内の時刻が日本時である場合どうする?
コンピュータ内の時刻の仕組み
ハードウェア
時計(RTC)
OS
時差設定
アプリ
データ
ファイル
時刻
供給源
通信
主な時刻供給源
NTP GPS
長波
JJY
世界時
(UTC)
携帯TV
放送
日本時
(JST)
UTC
+時差
テレホン
JJY
UTC
JST
時差
全対応
サマータイムになると?
• 日本時か、サマータイム(夏時間)か
NTP GPS
長波
JJY
UTCのまま
携帯TV
放送
JST
+時差
UTC
+時差
夏時間
JDST?
米国はUTC供給
英国は夏時間
テレホン
JJY
UTC
JST
時差
長波JJYのフォーマット
サマータイムへの
備えなのだが…
長波JJYの予備ビットの使い方は
決まってないが例示されている
SU1 SU2 意味
0 0 6日以内に夏時間への変更なし
1 0 6日以内に夏時間への変更あり
0 1 夏時間実施中(6日以内に夏時間
から通常時間への変更なし)
1 1 6日以内に夏時間終了
では、時刻はどちらが供給される?
戦略① JSTを供給しSU2が1なら時計が1時間足す
戦略② JDSTを供給し時計はそれを素直に表示
予備ビットは同期のための参考情報とする
調べてくださった方がいます!
結論:
どうやら戦略②
市販の多くの
電波時計は
夏時間時は
夏時間=JDSTが
供給されると
仮定している
ようだ
https://shogo82148.github.io/blog/2018/08/20/summer-time-homework/
テレホンJJYはよく出来てる
コマンド抜粋 http://jjy.nict.go.jp/time/teljjy/teljjy_p4.htmlより
コマンド 意味 応答形式
TIME 日本標準時を3秒間送出 hhmmss
JST 日本標準時を連続送出
hh:mm:ss を連続
送出
UTC 協定世界時を連続送出
hh:mm:ss を連続
送出
LEAPSEC
標準時の調整(うるう秒挿入削除)が次の1
日9時直前に有るか無いか
標準時の調整なし
標準時の調整あり(うるう秒挿入)
標準時の調整あり(うるう秒削除)
△0
+1
-1
LOCAL
協定世界時との時差
通常時
サマータイム実施中
+09
+10
SUMMER
サマータイムの期間
サマータイム設定なし
サマータイム設定あり
0000,0000
MMDD,MMDD
光テレホンJJY(実験中)
• フレッツ光内のIPUDPトンネルを
用いた閉域NTP
• ただし、時差情報を送る拡張がある
夏時間開始日時
夏時間終了日時
JSTとUTCの時差
JDSTとUTCの時差
OS時刻の戦略
日本標準時(JST):日本時
(主に組み込みや家電)
世界協定時(UTC):世界時+
タイムゾーン情報(TZ情報)
(Windows&Unix
含むiOS, Android)
心配なのが組み込み系や家電
• 時刻供給源がGPSやNTPの場合
UTCからら現地時間(JST/JDST)を
作り出す必要
• これが+9時間決め打ちだとハマる
•せめて時差を設定可能にしよう
•できればタイムゾーン情報を持てるように
•ワンタッチで時差を±1時間できる機能でも
夏時間 オンで時差を+1時間
オフで元の時間に
決め打ちなんてあるのか?
• 家庭用ルータはNTPからの時差決め打ち…
• ネット家電もNTPを参照しており
単純に9時間足しているものが…
•特にHEMSに多い
• あるメーカの地震計は
GPSで世界時取得
これを単純に9時間足している!
Windows等はOSに任せよう
• 基本はNTPのはずなので
NTPサーバが正しければOK
• ただし!そのNTPサーバはどこ?
長波JJYタイプとFMタイプは
夏時間対応orアップデート必要
セイコーソリューションズさんのNTPサーバの例
タイムゾーン情報とは?
• tzinfo, zoneinfoなどとも呼ぶ
• ある地域の時間が…
• 世界協定時から何時間ずれているか?
• 夏時間があるかないか?
• あるとすれば、毎年いつ始まり、いつ終わるか?
• 夏時間の幅は何時間か?
• …を蓄積したデータベース
• 有名なtz databaseはボランティア管理だったが
著作権問題発生後、現在ICANNが管理
http://www.iana.org/time-zones
• WindowsやUNIX系は持っているので
素直に設定に任せて現地時間を取ればいい
タイムゾーン情報の維持は重要
アップデートをしくじると…
• 2007年
米国でサマータイムの期間変更
• これに対応するため
WindowsUpdate等が行われたが
従わなかったパソコン等で
時間がずれるトラブルが頻発
http://www.edgeblog.net/2007/daylight-saving-time-the-year-2007-problem/
多くのベンダがパッチを提供してる。
他にfirewalls, routers, switches, NTP appliances,
time clocks, PBX systems, IVR/ACD systems, cell
phones, PDAs, photo copiers, fax machinesほか
の、ネットからの時刻を必要とする/理解す
る機器への対応を忘れるな。
OSが正しく現地時を知っていれば
• 何も考えずに現地時を入手するべき
•Cで言えばUNIXTIMEを自分で何とかするな
localtime()をちゃんと使え
• しかし世の中にはいろんな人がいる…
•Cでtime値に60*60*9を足す人
•JavaScriptでDate.now()を得て
1000*60*60*9を足す人
• Dateオブジェクトは現地時間を知ってるのに!
• どうしても時差が欲しいならgetTimezoneOffset()
Qiitaで60*60*9などを検索
こういうのが
バッドノウハウ
として
蔓延すると
厄介…
UNIX/POSIXでの「時刻」
struct tm {
int tm_sec; // 秒 [0-61] 最大2秒までのうるう秒を考慮
int tm_min; // 分 [0-59]
int tm_hour; // 時 [0-23]
int tm_mday; // 日 [1-31]
int tm_mon; // 月 [0-11] 0から始まることに注意
int tm_year; // 年 [1900からの経過年数]
int tm_wday; // 曜日 [0:日 1:月 ... 6:土]
int tm_yday; // 年内の通し日数 [0-365] 0から始まることに注意
int tm_isdst; // 夏時間が無効であれば 0
};
time_t time(time_t *tsec); // UTCで1970年1月1日0時0分0秒からの秒数
struct tm *localtime(const time_t *tsec); //現地時間で
char *ctime(const time_t *tsec); //
struct timeval {
long tv_sec; // UNIX Time
long tv_usec; // 1秒未満部分(マイクロ秒単位)
};
Windows
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
SYSTEMTIME systime;
GetLocalTime(&systime); // ローカル時間
GetSystemTime (&systime);
//FILETIME構造体は
//1601 年 1 月 1 日から
//100 ナノ秒間隔の数を表す
//64 ビット値。
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
FileTimeToSystemTime();
SystemTimeToFileTime();
データ問題
• 書き込まれるファイルやデータが
どの時間なのか
•OSは基本的に世界時で動いている
•ではその時間は「日本時」か「現地時」か
• 通信の中の時刻問題
•基本的に日本時間という定義が多数
•夏時間導入後はどうするのか
• その時間は「日本時」か「現地時」か
• 「現地時」にすると夏時間からの復帰時に時間が重複
特にEDI(電子データ交換)
• 全銀EDI(ZEDI)
• 日付情報は基本的にISO8601
• 例:2017-03-06T09:05:01.045Z
• 時差は必須ではない(現地時と判断)
• ビジネスIDなるものがあり
依頼を一意に特定できる受付番号を設定する。
• 日付時刻番号で生成“YYYYMMDDhhmmssnnnnnnn”
• これ…夏時間からの復帰時にダブリの可能性が
• NewsML
• 日本新聞協会規格では配信日時はJST決め打ち…
切り替え日にかかわる問題
• 1日が24時間でない日が年に2回
• つまり1日=60*60*24秒ではない!
• 毎日の処理を「60*60*24秒ごと」に
やろうとするとハマる
• 消える時間、増える時間が存在する
• 例えば切り替え時間が夜中2時の時は
夏時間になる日は2時~3時が消え
夏時間から戻る日は2時~3時が2回ある
• …cronは大丈夫?
• Vixieのcronはちゃんと「ごまかす」が、
それでもジョブ実行に必要な時間が確保できるか不明
繰り返す時間問題=うるう秒
• 日経XTECH 2012/07/26
『深刻なトラブルの元となり得る
「うるう秒」、廃止議論も3年延期』
https://tech.nikkeibp.co.jp/it/article/COLUMN/20120723/410766/
秒以下の
時間を
繰り返す
問題
同様の問題:2038年問題
• 世の中実は割とUNIXTIMEに依存
• そのUNIXTIMEを32bit Integerで
保管するシステムが多数…
•time_tがint32だったりすると…
• 2038年1月19日3時14分7秒で終わり
どうすればいいのか?
• time_tをuint32にすればいい?
•延命はできるがバグが怖い
• 符号なし整数の減算 time_a – time_b の値が
Cだと負にならない!
• time_tをint64にすればいい?
•すでにデータ構造や通信文に
埋め込まれている場合がある
• MySQLのTIMESTAMP型
• Linuxのファイルシステムext2/ext3のタイムスタンプ
おわりに
• サマータイム問題は終わったけど
これは時間の問題が
システムに負荷をかけることの
啓蒙の機会と考えるべき!
• サマータイムはもちろん
2038年問題への認知を
広げる機会に!

More Related Content

サマータイムとうるう秒と2038年問題