UnixコマンドラインからUnixタイムスタンプを日付に変換する簡単な方法はありますか?
date
ただし、各要素 (月、日、年、時間など) を指定するのはやや面倒であり、適切に機能させる方法がわかりません。もっと簡単な方法があるようです — 何か足りないのでしょうか?
UnixコマンドラインからUnixタイムスタンプを日付に変換する簡単な方法はありますか?
date
ただし、各要素 (月、日、年、時間など) を指定するのはやや面倒であり、適切に機能させる方法がわかりません。もっと簡単な方法があるようです — 何か足りないのでしょうか?
GNU coreutilsを使用するとdate
、次のことができます。
date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969
(From: BASH: Convert Unix Timestamp to a Date )
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 @
。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
Anton の功績: BASH: Unix タイムスタンプを日付に変換
@TomMcKenzieが別の回答へのコメントで述べているようにdate -r 123456789
、Unixエポック以降の秒単位の時間に対するより一般的な(つまり、より広く実装されている)単純なソリューションであることは間違いありませんが、残念ながら普遍的に保証された移植可能なソリューションはありません。
多くの種類のシステムでのオプションは、GNU Date の拡張機能-d
とはまったく異なるものを意味します。残念ながら、GNU Date はこれらの他の実装と同じように--date
解釈しません。-r
残念ながらdate
、使用している のバージョンを知る必要があり、古い Unixdate
コマンドの多くはどちらのオプションもサポートしていません。
さらに悪いことに、POSIXは、コマンドラインからUnix時間をフォーマットするための標準的な方法をまったくdate
認識せ-d
ず-r
、提供しません(私が知っている)(POSIX Awkにも がないためstrftime()
)。(前者は Unix エポックからの秒数として指定された時間を受け入れないため、touch -t
andは使用できません。)ls
ただし、Brian Kernighan から直接入手できる One True Awk には、strftime()
関数が組み込まれているだけでなくsystime()
、Unix エポック以降の現在の時刻を秒単位で返す関数もあるため、おそらく Awk ソリューションが最も移植性が高いことに注意してください。
表記がぎこちない場合は、 - オプションが役立つかもしれません-R
。RFC 2822 形式で日付を出力します。したがって、これらすべての識別子は必要ありません: date -d @1278999698 -R
. もう 1 つの可能性は、ロケールで日付を秒単位で出力することですdate -d @1278999698 +%c
。覚えやすいはずです。:-)
標準の Perl ソリューションは次のとおりです。
echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'
(または、必要に応じて現地時間)
ここにある他の例は、覚えにくいものです。最も簡単に:
date -r 1305712800
awk 'BEGIN { print strftime("%c", 1271603087); }'