4 ポイント 投稿者 GN⁺ 2023-11-12 | 1件のコメント | WhatsAppで共有
  • Unixタイムスタンプが17億台に入るということは、1970年1月1日 UTC 以降の累積秒数がそこまで積み上がったことを意味し、例の値は 1782553539 と表示される
  • 変換ツールはタイムスタンプを GMT、ユーザーのタイムゾーン、相対時間に変換し、秒・ミリ秒・マイクロ秒・ナノ秒の単位をサポートする
  • 同じ時刻を ISO 8601 と複数の RFC 形式でもあわせて表示するため、システム間での日付表現の違いを確認しやすい
  • Unixタイムスタンプは場所に関係なく同じ時点を指すため、分散アプリケーションで日付情報の追跡と並べ替えに役立つ
  • 2038年1月19日には 32ビットオーバーフロー が問題になるため、アプリケーションは新しいタイムスタンプ慣例を採用するか、64ビットシステムへ移行する必要がある

Unixタイムスタンプの基準と変換方法

  • Unixタイムスタンプは時間を秒単位の累積値として扱う方式である
    • 基準点は1970年1月1日 UTC の Unix Epoch
    • 特定の日付と Unix Epoch の間に経過した秒数がタイムスタンプ値になる
    • この値は、ユーザーが地球上のどこにいても同じ時点を指す
  • ページの変換ツールは、タイムスタンプ入力と日付/時刻入力の両方をサポートする
    • タイムスタンプは秒、ミリ秒、マイクロ秒、ナノ秒単位で入力できる
    • 日付/時刻は年、月、日、24時間制の時、分、秒を入力して Unixタイムスタンプへ変換する
    • 結果は GMT、ユーザーのタイムゾーン、相対時間形式で確認できる

あわせて表示される標準時刻形式

  • 現在の epoch の例は、複数の標準時刻形式でもあわせて提供される

時間単位の換算と2038年問題

  • ページでは、人間が読める時間単位を Unixタイムスタンプの秒数に換算して表示する
    • 1時間: 3600
    • 1日: 86400
    • 1週間: 604800
    • 1か月、30.44日基準: 2629743
    • 1年、365.24日基準: 31556926
  • 2038年1月19日には 32ビットオーバーフロー により Unixタイムスタンプが動作を停止する
    • その前に数百万のアプリケーションが新しいタイムスタンプ慣例を採用しなければならない
    • または 64ビットシステムへ移行して、タイムスタンプを利用できる期間をさらに延ばす必要がある

1件のコメント

 
GN⁺ 2023-11-12
Hacker Newsの反応
  • 1億秒はあまりにも早く過ぎる
    ちなみに Unix timestamp 1600000034 時点の New York Times の1面はこれだった:
    https://web.archive.org/web/20200913122714/https://www.nytim...
    そして 1500000301、1400000634、1300007806 の時点はそれぞれこちら:
    https://web.archive.org/web/20170714024501/http://www.nytime...
    https://web.archive.org/web/20140513170354/http://www.nytime...
    https://web.archive.org/web/20110313091646/http://www.nytime...

    • 3.17年
  • Unix timestamp 1 600 000 000 もそれほど昔ではなく、2020-09-13 12:26:40 UTC だった
    当時の HN での議論はこちら: https://news.ycombinator.com/item?id=24452885
    その出来事を記念して書いた自分のブログ記事はこちら: https://susam.net/maze/unix-timestamp-1600000000.html
    1億秒はおよそ3年2か月なので、こういうイベントは数年ごとに一度見られる
    いちばん壮観なイベントは、まだ9年半先の Unix timestamp 2 000 000 000 だと思う: 2033-05-18 03:33:20 UTC。これはおよそ33年8か月に一度しかない
    Python では 1700000000 はこう表示される:
    $ python3 -q

    from datetime import datetime
    datetime.utcfromtimestamp(1_700_000_000)
    datetime.datetime(2023, 11, 14, 22, 13, 20)

    GNU date(Linux):
    $ date -ud @1700000000
    Tue Nov 14 22:13:20 UTC 2023
    BSD date(macOS, FreeBSD, OpenBSD など):
    $ date -ur 1700000000
    Tue 14 Nov 2023 22:13:20 UTC

    • 33年だって! 90年代後半は MUD をやって過ごしていて、なぜか epoch timestamp をファイル名に使うセーブファイルが多かった
      コードベースの一部を担当するようになって、それらのファイルをたくさん扱ったが、どれも 8億〜9億台の数字だった
      ある時点から、その範囲の数字を見るだけでだいたい何年何月かを数週間の誤差で即座に把握できるようになった
      奇妙な環境は奇妙な超能力を育てる
      [0] https://en.wikipedia.org/wiki/Multi-user_dungeon
    • もっと壮観なのは、2038年1月に 2,147,483,648 というきれいな数字に到達するときだ
    • 2222222222 のほうがもっと特別だと思う: Sat Jun 02 2040 03:57:02 GMT+0000
      運が良ければ 3333333333 も自分の目で見られるかもしれない。すごい日になるだろう
  • 完璧なシャツを狙って https://datetime.store/ を開くにはちょうどいいタイミングだ

    • あのサイトは火曜日に本当に落ちそう…
      「ボス! DDoS を受けています!」
      「いや、坊や、ただの火曜日だ」
    • 統計的にいつ死ぬか計算してくれる 死亡時計 みたいなものがあるじゃないか
      その時刻を刻んだシャツも見つけられるのか気になる
    • 昔思いついた 1BTC コーヒーマグ のアイデアを思い出した。Bitcoin が初めて 2万ドルに上がっていた初期のころだ
  • 999,999,999 から10億に切り替わるのを見ようと夜更かししていて、「今週のことは一生覚えているだろう」と思った
    60時間後には世界中がその週を記憶することになるとは思わなかった

    • Timestamp 1000000000(Sat 2001-09-08 18:46:40 PDT) は、当時使っていたバグ報告システム Remedy でバグを起こした
      システムは epoch 以降の秒数を文字列として保存していたが、9桁に収まると想定していた
      1000000000 になると最後の桁を切り捨て始め、その結果 Sat 1973-03-03 01:46:40 PST に戻って、実際の時間の10%の速度で進むようになった。かなり早く修正された
    • そこまで近かったことは覚えていないが、当時は Slashdot を取り憑かれたように読んでいて、9/11 のときにも役に立った
      epoch イベントもきっと取り上げていたはずだ
  • 2009年に Boston のあるホテルのロビーで開かれた 1234567890 集会 に行ったことがある

    • 大手銀行のトレーディングフロアで夜勤中だった
      デリバティブ技術サポートチームのマネージャーがその時点がもうすぐだと教えてくれて、シェルを開いて watch コマンドと epoch 秒を出力する date コマンドを動かし、その瞬間を見届けた
      それからまた仕事に戻った
    • あの瞬間を覚えている! そのときはバーのような場所にいたが、準備していたのでノートPCを持っていた
      見逃さないように上矢印と Enter をひたすら押していた
  • Vingeの A Deepness in the Sky で好きな点のひとつは、10進時間を使っていること: ksec や Msec のような単位
    地球時間と10進時間の変換を示す素敵な対数スケールがある

    • そう! あの本のおかげで、ksec がだいたい15分で、Msec がだいたい2週間だと、もう調べなくても分かるようになった
      大まかな計算をするとき、思ったより頻繁に役に立つ
      Gsec が約3分の1世紀だということは、Tom Duff の観察のおかげで以前から知っていた
      この体系にすぐ一般的に移行することはなさそうだ。生体リズムに結びついた単位があまりに便利だから
      それでも、宇宙にいる人類を語るときにもっと頻繁に出てこないのは少し意外だ
      [0] "How many seconds are there in a year? If I tell you there are 3.155 x 10^7, you won't even try to remember it. On the other hand, who could forget that, to within half a percent, pi seconds is a nanocentury." --Tom Duff
    • その本の ソフトウェア考古学者 たちは、time_t epoch が単に1970年ではなく月面着陸を指していると誤解していた :)
    • Emergents も良かった。リベラルな進歩主義者たちがユートピアを作り、雇用率100%、全員にダイヤモンドの宮殿が与えられる世界だった
  • 2038年1月19日 まであと5,148日
    そこまで生きていたら、その翌日が私の65回目の誕生日だ。ちょうどデジタル・アルマゲドンに間に合うことになる

  • 10進表記が変わる瞬間よりも、比較的上位の ビットが0から1に切り替わる瞬間 を祝うほうが理にかなっている

  • 1億秒 という単位が気に入っている
    1年より長く10年より短い。1.6e8 の時代はパンデミックだった。1.7e8 は何をもたらすだろう?

  • ほかの人たちもこういうことにワクワクしているのがいい。UNIX Timeval 愛好家なら、この tf ツールを試してみるといい [1]
    友人が C/Lex/Yacc で作ったものを15年半にわたって毎日使っていて、その楽しさを共有したくて Golang + Homebrew に移植した
    [1] https://github.com/neomantra/tf
    brew tap neomantra/homebrew-tap
    brew install tf
    こういう丸い数字を出力してみよう。tf は10桁だと自動検出するので、seq もそこから始めた

    for TV in $(seq -f %.f 1000000000 100000000 2000000000); do echo $TV $TV | tf -d ; done
    2001-09-08 18:46:40 1000000000
    2004-11-09 03:33:20 1100000000
    2008-01-10 13:20:00 1200000000
    2011-03-12 23:06:40 1300000000
    2014-05-13 09:53:20 1400000000
    2017-07-13 19:40:00 1500000000
    2020-09-13 05:26:40 1600000000
    2023-11-14 14:13:20 1700000000
    2027-01-15 00:00:00 1800000000
    2030-03-17 10:46:40 1900000000
    2033-05-17 20:33:20 2000000000
    面白い日付もある。-g は1行の中で複数を検出し、-d は日付を含める
    echo 1234567890 __ 3141592653 | tf -gd
    2009-02-13 15:31:30 __ 2069-07-20 17:37:33
    楽しんで使ってほしい。時刻を調べるための時間を節約できますように!