cliでエポックタイムスタンプを人間が読める形式に変換するには?日付を使用してこれを行う方法があると思いますが、構文が混乱しています(他の方法も歓迎します)。
答え1
*BSDから:
date -r 1234567890
Linux(特に GNU coreutils ≥5.3):
date -d @1234567890
以前のバージョンのGNU Dateでは、UTC時代との相対的な違いを計算できます。
date -d '1970-01-01 UTC + 1234567890 seconds'
移植性が必要な場合は幸運ではありません。 POSIXシェルコマンドを使用して(直接計算を実行せずに)行をフォーマットできる唯一の時間は、現在の時刻です。実際にPerlを使用できることが多いです。
perl -le 'print scalar localtime $ARGV[0]' 1234567890
答え2
エポック時間が秒ではなくミリ秒単位の場合は、最後の3桁の数字の前にドットを追加するか(user79743の説明で提案されているように)、最後の3桁を削除して次に渡しますdate -d
。
直接入力すると、誤った結果が表示されます。
$ date -d @1455086371603
Tue Nov 7 02:46:43 PST 48079 #Incorrect
最後の3桁の数字の前にドットを追加してください。
$ date -d @1455086371.603
Tue Feb 9 22:39:32 PST 2016 #Correct
または、最後の3桁を削除します。
$ date -d @1455086371
Tue Feb 9 22:39:31 PST 2016 #Correct after removing the last three digits. You may remove and round off the last digit too.
答え3
date -d @1190000000
1190000000をその時代に変えてください。
答え4
以下を持っているbash-4.2
かそれ以上:
$ printf '%(%FT%T%z)T\n' 1234567890
2009-02-13T23:31:30+0000
(ここでは、%FT%T%z
-type形式、UTCオフセット()をstrftime()
含む標準の明示的な形式が使用されます。)%z
この構文はからインスピレーションを受けましたksh93
。
ただし、ksh93
パラメーターは日付式として扱われ、そのための多様でほとんど文書化されていない形式がサポートされています。
Unix 時代の場合、構文は次ksh93
のとおりです。
printf '%(%FT%T%z)T\n' '#1234567890'
ksh93
ただし、独自のタイムゾーンアルゴリズムを使用しているように見え、間違っている可能性があります。たとえば、イギリス本土では1970年に一年中夏でした。
$ TZ=Europe/London bash -c 'printf "%(%c)T\n" 0'
Thu 01 Jan 1970 01:00:00 BST
$ TZ=Europe/London ksh93 -c 'printf "%(%c)T\n" "#0"'
Thu Jan 1 00:00:00 1970
ksh93(そしてzshstrftime
組み込み)1秒未満の速度をサポートしていますが、まだbashはサポートしていません。
$ ksh -c 'printf "%(%FT%T.%6N%z)T\n" 1234567890.123456789'
2009-02-13T23:31:30.123456-0000
$ zsh -c 'zmodload zsh/datetime; strftime %FT%T.%6.%z 1234567890 123456780'
2009-02-13T23:31:30.123457+0000