UnixタイムスタンプをUnixコマンドラインから日付に変換するための簡単な1行の方法はありますか?
date
は機能する可能性がありますが、各要素(月、日、年、時間など)を指定するのがやや面倒で、適切に機能させる方法がわかりません。もっと簡単な方法があるかもしれないようです-私は何かを見逃していますか?
GNUのdate
を使用すると、次のことができます。
date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969
(From: BASH:Unixタイムスタンプを日付に変換する )
OS Xでは、date -r
を使用します。
date -r "$TIMESTAMP"
または、strftime()
を使用します。シェルから直接使用することはできませんが、 gawk からアクセスできます。 %c
指定子は、ロケールに依存した方法でタイムスタンプを表示します。
echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
# echo 0 | gawk '{print strftime("%c", $0)}'
Wed 31 Dec 1969 07:00:00 PM EST
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
@
の後ろの数字は秒単位の数字です
このソリューションは、date -d @
をサポートしないdateのバージョンで動作します。 AWK またはその他のコマンドは必要ありません。 Unixタイムスタンプは、1970年1月1日(UTC)以降の秒数であるため、UTCを指定することが重要です。
date -d '1970-01-01 1357004952 sec UTC'
Mon Dec 31 17:49:12 PST 2012
Macを使用している場合は、次を使用します。
date -r 1357004952
エポックを取得するためのコマンド:
date +%s
1357004952
クレジットはアントンに送られます:BASH:Unixタイムスタンプを日付に変換
@TomMcKenzieが別の答えへのコメントで述べているように、date -r 123456789
は間違いなくUnixエポックからの秒数として与えられた時間のためのより一般的な(すなわち、より広く実装された)シンプルなソリューションですが、残念ながら普遍的な保証されたポータブルなソリューションはありません。
多くのタイプのシステムでの-d
オプションは、GNU Dateの--date
拡張とはまったく異なるものを意味します。悲しいことにGNU Dateは-r
をこれらの他の実装と同じように解釈しません。残念ながら、使用しているdate
のバージョンを知る必要があり、多くの古いUnix date
コマンドはどちらのオプションもサポートしていません。
さらに悪いことに、POSIX date
は-d
も-r
も認識せず、コマンドラインからUnix時間をフォーマットするための標準的な方法をまったく提供しません(POSIX以降)。 Awkにもstrftime()
)がありません。 (touch -t
とls
は使用できません。前者は、Unixエポック以降の秒として指定された時間を受け入れないためです。)
ただし、Brian Kernighanから直接入手できるOne True Awkには、strftime()
関数と、Unixエポック以降の現在の時刻を秒単位で返すsystime()
関数が組み込まれています。 Awkソリューションは最もポータブルです。
表記がわかりにくい場合は、-R
-オプションが役立つかもしれません。 RFC 2822形式の日付を出力します。したがって、これらすべての識別子date -d @1278999698 -R
は必要ありません。別の可能性は、ロケールで日付を秒単位で出力することです:date -d @1278999698 +%c
。覚えやすいはずです。 :-)
ここの他の例は覚えにくいです。最も簡単なもの:
date -r 1305712800
標準のPerlソリューションは次のとおりです。
echo $TIMESTAMP | Perl -nE 'say scalar gmtime $_'
(または、必要に応じて現地時間)
上記のdabest1の回答に対するわずかな修正。タイムゾーンをGMTではなくUTCとして指定します。
$ date -d '1970-01-01 1416275583 sec GMT'
Tue Nov 18 00:53:03 GMT 2014
$ date -d '1970-01-01 1416275583 sec UTC'
Tue Nov 18 01:53:03 GMT 2014
2つ目は正しいです。その理由は、英国では1968年から1971年まで夏時間が継続的に有効だったためだと思います。
awk 'BEGIN { print strftime("%c", 1271603087); }'
〜/ .bashrcに以下を入れてください:
function unixts() { date -d "@$1"; }
使用例:
$ unixts 1551276383
Wed Feb 27 14:06:23 GMT 2019