Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20181030 DBSCシンポジウム 情報システムと時間の表現

1,319 views

Published on

情報システムが時間に与える影響をサマータイムと2038年問題を中心に

Published in: Technology
  • Be the first to comment

20181030 DBSCシンポジウム 情報システムと時間の表現

  1. 1. 情報システムにおける 時間の表現とデータベース データベースコンソーシアム副会長 立命館大学情報理工学部 上原哲太郎
  2. 2. この夏突然… • 7月28日オリパラ組織委 「20年に限ってでも良いので サマータイムを導入する法改正を 検討して欲しい」 • 8月7日オリパラ組織委 「19年20年に限って2時間の サマータイムを検討して欲しい」 →首相が党に検討指示
  3. 3. そもそも サマータイム(夏時間)とは • 夏の長い日照時間を活用するため 夏に「時計を早める」制度 (普通は1時間…だが組織委案は2時間) • 主な目的は「節電」「省エネ」「CO2削減」 •元々第一次大戦中の燃料節約がきっかけで広がる •決して暑さ対策ではない • 国連加盟国の1/3で実施(60カ国) • G7で現在実施していないのは我が国だけ
  4. 4. 主に北米と欧州で実施 By Paul Eggert CC-BY-SA-3.0, via Wikimedia Commons 実施中 過去に 実施 実施経験 なし 主に暑い国
  5. 5. 導入→廃止→繰り返す導入論 • 戦後GHQ指導により1948年に突然導入 主権回復に伴い4年で廃止 • 高度成長期:エネルギー不足で導入論が高まる • 1990年代から具体化策が繰り返す…日経見ると • 1995年3月4日 「サマータイム、立法化の動き強まる」 • 1999年2月23日 「参院の超党派議連、サマータイム2001年度導入、議員立法提出へ。」 • 2001年4月18日 「サマータイム、2003年導入へ、環境省、法案を来年提出」 • 2004年9月25日 「サマータイム法案提出へ。」 • 2005年4月27日 「サマータイム法案、今国会に提出へ――自公が合意、2007年導入めざす。」 • 2008年5月30日 サマータイム「10年導入を」、超党派で法案提出へ、省エネ・経済効果見込む。 • 2008年は本当に提出されそうだったが直前に止まる
  6. 6. しかし蘇る導入論: 東日本大震災直後の経団連緊急提言
  7. 7. 当時の私のつぶやき…
  8. 8. 2011年に論点全部出てる… 特需論にクギ NTP万能という誤解 NTPこそ問題 組み込みヤバいよ 海外では出来てるのに?論 それ「経済効果」ちゃう!
  9. 9. 今回伝えられてたサマータイム案 • 6月最初の週末から8月最後の週末まで • 2時間繰り上げ • 例えば2019年実施なら… •2019年6月2日(日)午前2時になると 午前4時に2時間飛ばす •2019年9月1日(日)午前4時になると 午前2時までもう一度戻る • よって9月1日2時~4時は2回繰り返す 9月1日3時、さてどっち?
  10. 10. 導入効果:メリット・デメリット • メリット • オリンピック競技の暑さ対策?? • 節電&省エネ効果?CO2削減? • 防犯になる? • 経済効果?? • 第一生命経済研究所の永浜利広首席エコノミストの試算 「個人消費が押し上げられ、年7000億円の経済効果」 • システム改修も経済効果? • デメリット • 社会的混乱?健康被害? • システム改修による負担?影響?? これが 伝わらない もどかしさ
  11. 11. 前回の試算 • 地球環境と夏時間を考える国民会議 報告書(1999)の試算 •ハードウェア・ソフトウェアあわせて 1000億円程度(各省庁・業界ヒアリング積算) •必要な周知期間・準備期間は2年程度 • 2年の根拠?! •航空業界「IATAでの調整に2年程度」 •ソフトウェア業界「今は2000年問題対応で 手が回らないので2000年以降にして」 何年かかると 言ってない サマータイム 推進論の主な根拠
  12. 12. いや、今は2年でも無理では? • 「時計の自動設定」を行う機器が格段に増えた • 1999年長波JJY開始 2006年NICT NTPサービス開始 • さらに、今はまさにIoT時代ではないか! • 「時計の自動設定」技術的に意味するところが 理解されていないのでは? • 時計は協定世界時を自動設定し機器側が時差を足す =機器側のソフト修正なしにサマータイム対応は不可能 • ソフトがネット修正可能な機器ばかりではない • サマータイムに対応したアプリ開発を 理解できないプログラマは多そう… • 教育からやらなくちゃいけないんじゃないの?? こらあかん
  13. 13. 2018年8月10日 アレを出す …そしてバズる。
  14. 14. そしてこうなった • 2018年9月28日 朝日新聞朝刊1面 自民党は 議員連盟を 研究会に格下げ 27日第1回会合で 異論が出て… 公明党も 反対を表明
  15. 15. 最大の収穫 • 朝日、共同通信、NHKの報道によると 遠藤運営委員長: 「気持ちは(導入)したいが、 物理的にシステムの問題や、 世論の反応を見ると、 なかなかそこは難しい」 そう!それ! システムの問題!
  16. 16. でも…あのサマータイム騒動が 最後の一匹だとは思えない もし 推進運動が続けて 行われるとしたら、 あの サマータイムの 同類が、 また国会の どこかへ 現れてくるかも しれない… 2018.9.28毎日新聞
  17. 17. 大きな反省 • EUの廃止論がなければ危なかった? • システムにかかる負荷に対しての 認知が少なすぎないか? • これを機に 「時間とシステム」について 認識を新たにしよう!
  18. 18. 整理しておこう 「時間」 の問題 不定形な 時間の 例外処理 時間の 表示形式 処理 時間の データ 形式処理 うるう秒 うるう年 サマータイム 祝日 2000年問題等 タイムゾーン 時刻データ型 時刻補正問題
  19. 19. 不定形な時間の流れ処理 • 通常あり得ない時間の流れ (特に「逆行する時刻」)を 処理する際に起きる問題 • 時刻補正問題 • プログラムが動いているまま時刻補正すると 時刻が急に進んだり遅れたりすることによりバグを誘発 • 特に時刻が戻る場合に問題 • うるう秒問題 • うるう秒では1秒以下の時刻において逆戻りが発生 • サマータイムやタイムゾーン補正でも ローカルタイムしか処理してないと起きる
  20. 20. 繰り返す時間問題=うるう秒 • 日経XTECH 2012/07/26 『深刻なトラブルの元となり得る 「うるう秒」、廃止議論も3年延期』 https://tech.nikkeibp.co.jp/it/article/COLUMN/20120723/410766/ 秒以下の 時間を 繰り返す 問題
  21. 21. 時間の流れがシステムトラブル: サマータイムで狂うエアコン • 組み込み機器でRTCの時間が現地時間 • RTCの時間を長波JJYにより自動設定 • 機器は次のような挙動 •連続的に温度を測定する •温度が前の測定値より3度上がる・下がると エアコンを動かして温度を下げる・上げる • そのパワーを温度の時間変化で決める
  22. 22. システムの構成 温度測定 制御 記録と 制御 以前と3度以上変わったら 冷やす/温める
  23. 23. エアコンのパワーの決め方 今の温度 前回の温度 今の時間 前回の時間 1分あたりの 温度変化= - - これが正の値なら冷房 これが負の値なら暖房
  24. 24. エアコンのパワーの決め方 26℃ 23℃ AM4:03 AM2:23 = - - 1分あたり0.03℃上昇 冷房しよう! 3 100
  25. 25. 夏時間から元に戻る夜に… 26℃ 23℃ AM1:33 AM2:23 = - - 1分あたり0.06℃低下 強く暖房しよう! 3 -50 夏時間 本来は AM3:33 本当は「3÷70」で 1分あたり0.042℃上昇
  26. 26. 新元号問題 • 幸いいつ始まるかは確定 • 問題は「表示問題」「データ問題」 •文字幅は確定するか? •合字の文字コードを計算で得てないか? • ㍻ ㍼ ㍽ ㍾はU+337Bから連続で割られているので 例えば平成=4, 昭和=3…明治=1とコード化されていれば U+337F-codeで取れた • しかしU+337Aは使用済み •そもそも元号を上記のようなコードで データ化していないか?
  27. 27. 新元号への備え Windowsでは すでに レジストリに 用意されている .NET Framework を使っていれば 変換は自動 合字用のUnicodeも 定義済み U+32FF
  28. 28. 祝日対応問題 • 来年は祝日がとても変則的になるが 祝日処理は問題にならないか? • もともと祝日はフレキシブル • 特に春分秋分の日は正式には政令で決める • よってもともと計算ではなく データで処理するようにするべき • 一応国が提供してくれてる…csvで… http://www.data.go.jp/data/dataset/cao_ 20160323_0068
  29. 29. プログラムの夏時間対応のために • 時刻合わせ • システムに入ってくる時刻供給源を全部洗い、 正しく設定されるか確かめる必要 • タイムゾーン更新と設定(OS時刻) • アプリケーションでの対応 • 夏時間でも現地時間を取得できるか • 年2回の夏時間移行日に正しく動くか • データの健全性(特に通信電文) • DB内に書かれている時刻は日本時想定? • 電文内の時刻が日本時である場合どうする?
  30. 30. 余談:欧米人でもミスる Githubで DST issueや “Daylight Saving Time” “Summer Time” で探すと いっぱい 見つかる… DST issue 約5万件 “Summer Time” 約5千件
  31. 31. コンピュータ内の時刻の仕組み ハードウェア 時計(RTC) OS 時差設定 アプリ データ ファイル 時刻 供給源 通信
  32. 32. 日本での主な時刻供給源 NTP GPS 長波 JJY 世界時 (UTC) 携帯TV 放送 日本時 (JST) UTC +時差 テレホン JJY UTC JST 時差 全対応
  33. 33. これがサマータイムになると? • 日本時か、サマータイム(夏時間)か NTP GPS 長波 JJY UTCのまま 携帯TV 放送 JST +時差 UTC +時差 夏時間 JDST? 米国はUTC供給 英国は夏時間 テレホン JJY UTC JST 時差
  34. 34. OS時刻の戦略 日本標準時(JST):日本時/現地時 (主に組み込みや家電) 世界協定時(UTC):世界時+ タイムゾーン情報(TZ情報) (Windows&Unix 含むiOS, Android)
  35. 35. Windows等はOSに任せよう • 基本はNTPのはずなので NTPサーバが正しければOK • ただし!そのNTPサーバはどこ? 長波JJYタイプとFMタイプは 夏時間対応orアップデート必要 セイコーソリューションズさんのNTPサーバの例
  36. 36. タイムゾーン情報とは? • tzinfo, zoneinfoなどとも呼ぶ • ある地域の時間が… • 世界協定時から何時間ずれているか? • 夏時間があるかないか? • あるとすれば、毎年いつ始まり、いつ終わるか? • 夏時間の幅は何時間か? • …を蓄積したデータベース • 有名なtz databaseはボランティア管理だったが 著作権問題発生後、現在ICANNが管理 http://www.iana.org/time-zones • WindowsやUNIX系は持っているので 素直に設定に任せて現地時間を取ればいい
  37. 37. タイムゾーン情報の維持は重要 アップデートをしくじると… • 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ほか の、ネットからの時刻を必要とする/理解す る機器への対応を忘れるな。
  38. 38. OSが正しく現地時を知っていれば • 何も考えずに現地時を入手するべき •Cで言えばUNIXTIMEを自分で何とかするな localtime()をちゃんと使え • しかし世の中にはローカルタイムを 自分で作っちゃう人がいる… •Cでtime値に60*60*9を足す人 •JavaScriptでDate.now()を得て 1000*60*60*9を足す人 • Dateオブジェクトは現地時間を知ってるのに! • どうしても時差が欲しいならgetTimezoneOffset()
  39. 39. Qiitaで60*60*9などを検索 こういうのが バッドノウハウ として 蔓延すると 厄介…
  40. 40. 一般のデータの時刻タイムゾーン • 書き込まれるファイルやデータが どの時間なのか •OSは基本的に世界時で動いている •書き込み時間は「世界時」か「現地時」か • 通信の中の時刻問題 •本来は世界時でやるのがよいが ローカルタイムという定義が多数 • その「現地時」は夏時間を考慮しているか? • 対応すると夏時間からの復帰時に時間が重複
  41. 41. 特にEDI(電子データ交換) • 例えば全銀EDI(ZEDI) • 日付情報は基本的にISO8601形式 • 例:2017-03-06T09:05:01.045Z • 時差は必須ではない(現地時と判断) • ビジネスIDなるものがあり 依頼を一意に特定できる受付番号を設定する。 • 日付時刻番号で生成“YYYYMMDDhhmmssnnnnnnn” • これ…夏時間からの復帰時にダブリの可能性が • NewsML • 日本新聞協会規格では配信日時はJST決め打ち…
  42. 42. 切り替え日にかかわる問題 • 1日が24時間でない日が年に2回 • つまり1日=60*60*24秒ではない! • 毎日の処理を「60*60*24秒ごと」に やろうとするとハマる • 消える時間、増える時間が存在する • 例えば切り替え時間が夜中2時の時は 夏時間になる日は2時~3時が消え 夏時間から戻る日は2時~3時が2回ある • …cronは大丈夫? • Vixieのcronはちゃんと「ごまかす」が、 それでもジョブ実行に必要な時間が確保できるか不明
  43. 43. 時刻データの精度や範囲 • ストレージの中の時刻問題 •データベースの時刻はどう保存されてる? •ファイルシステムの時刻の精度は? • 例:NTFSは世界時保管 100ナノ秒精度(ただしOSはミリ秒) FATは現地時保管 最終更新は2秒精度 ext2/3は世界時(32bit UNIXTIME)保管 精度は1秒 •それぞれタイムゾーンの概念はあるか? • 通信文でも同様の問題 •例えばJCA手順では日付は6桁の数字! • 2000年は乗り越えたけど3000年問題?!
  44. 44. データベースの時間・時刻 Oracleの場合 型名 格納 サイズ(B) 説明 最遠の過去 最遠の未来 精度 Date 7バイト 日付と時刻両方 (時間帯なし) 4713 BC 9999 AD 1秒 timestamp [ (p=0~9) ] 7~11 バイト 日付と時刻両方 (時間帯なし) 4713 BC 9999 AD 秒以下 p桁 timestamp [ (p=0~9) ] with time zone 13バイト 日付と時刻両方、 時間帯付き 4713 BC -14:00 9999 AD +12:00 秒以下 p桁 timestamp [ (p=0~9) ] with local time zone 7~11 バイト 日付と時刻両方 (時間帯なし) 4713 BC 9999 AD 秒以下 p桁 interval year [ (p=0~9) ] to month 5バイト 年月の期間 (pは年の桁数) 0 999999999年 月 interval day [ (p=0~9) ] to second [ (q=0~9) ] 11バイト 日秒の期間 (pは日の桁数) 0 999999999日 秒以下 q桁 https://docs.oracle.com/cd/E57425_01/121/SQLRF/sql_elements001.htm
  45. 45. PostgreSQLの場合 型名 格納 サイズ 説明 最遠の過去 最遠の未来 精度 timestamp [ (p) ] [ without time zone ] 8 バイト 日付と時刻両方 (時間帯なし) 4713 BC 294276 AD 1μ秒、 14桁 timestamp [ (p) ] with time zone 8バイト 日付と時刻両方、 時間帯付き 4713 BC 294276 AD 1μ秒、 14桁 date 4バイト 日付(時刻なし) 4713 BC 5874897 AD 1日 time [ (p) ] [ without time zone ] 8バイト 時刻(日付なし) 00:00:00 24:00:00 1μ秒、 14桁 time [ (p) ] with time zone 12バイト その日の時刻のみ、 時間帯付き 00:00:00+1459 24:00:00-1459 1μ秒、 14桁 interval [ fields ] [ (p) ] 16バイト 時間間隔 -178000000年 178000000年 1μ秒、 14桁 https://www.postgresql.jp/document/9.4/html/datatype-datetime.html
  46. 46. MySQLの場合(5.6.4以降) 型名 格納 サイズ 説明 最遠の過去 最遠の未来 精度 date 3バイト 日付(時刻なし) 1000 AD 9999 AD 1日 datetime [ (p=0~6) ] 5~8 日付時刻 1000 AD 9999 AD 秒以下 p桁 timestamp [ (p=0~6) ] 4~7 日付時刻 1970 AD 2038-01-19 03:14:07.99… 秒以下 p桁 time [ (p) ] 3~6 時刻(日付なし) -838:59:59 838:59:59 .999999 秒以下 p桁 year 1バイト 年 1901 AD 2155 AD 1年 https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-types.html
  47. 47. 2038年問題 • 世の中実は割とUNIXTIMEに依存 • そのUNIXTIMEを32bit Integerで 保管するシステムが多数… •time_tがint32だったりすると… • 2038年1月19日3時14分7秒で終わり
  48. 48. どうすればいいのか? • time_tをuint32にすればいい? •延命はできるがバグが怖い • 符号なし整数の減算 time_a – time_b の値が Cだと負にならない! • time_tをint64にすればいい? •すでにデータ構造や通信文に 埋め込まれている場合がある • MySQLのTIMESTAMP型 • Linuxのファイルシステムext2/ext3のタイムスタンプ
  49. 49. これからシステムを組む人に • 時刻はできるだけ世界時(UTC)で 保存や伝送しよう •表示の時に現地時間に合わせる方が トラブルが少ない •国際対応も楽 • 時刻の精度と表現範囲に気を付けよう •特に2038年問題は知っておこう!
  50. 50. あと20年もあると思ってる人? インフラ系は 20年くらい 使われる 金利計算など 将来の時間を 扱う場合も 注意
  51. 51. おわりに • サマータイム問題は終わったけど これは時間の問題が システムに負荷をかけることの 啓蒙の機会と考えるべき! • サマータイムはもちろん 2038年問題をはじめとする 時間とシステムの問題認知を 広げる機会に!

×