c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud 等に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開発中です。

J 言語で UTC 日時と Unix timestamp とを相互變換する

難解なので記録しておく。

現在日時を UTC で得るには、

   6!:0 ''
2020 8 12 21 26 14.8005

6!:0 で一つの動詞 (一階の函數) である 6!: Time。引數の '' は出力形式を指定する文字列で、'' を指定した時には特別に vector で日時が返って來る。

現在の Unix 秒を得るには、

   <.((tsrep 6!:0'')-tsrep 1970 1 1 0 0 0)%1000
1597267682

tsrep は 1800-01-01 00:00:00Z から引數迄の milli 秒を得る動詞 Standard Library/dates - J Wiki。二項動詞としての % は浮動小數點除算、二項動詞としての - は引き算、單項動詞としての <. は floor。演算は右結合。

現在の timestamp を milli 秒で得るには 1000 で割らなければ好い。

   <.(tsrep 6!:0'')-tsrep 1970 1 1 0 0 0
1597268141776

Unix 秒から日時を起こすには、

   t=:1597267682
   (todate(t%60*60*24)+todayno 1970 1 1),(24|<.t%60*60),(60|<.t%60),(60|t)
2020 8 12 21 28 2

todate は 1800-01-01 からの日數を取って日時を表す vector を返す動詞。todayno は日時を表す vector を取って 1800-01-01 からの日數を返す動詞。二項動詞としての * は掛け算、二項動詞としての | は整數除算の剩り、二項動詞としての ,vector を作る。

hook や fork を巧く使へば變數を無くせる筈だが面倒だ。