152

UnixコマンドラインからUnixタイムスタンプを日付に変換する簡単な方法はありますか?

dateただし、各要素 (月、日、年、時間など) を指定するのはやや面倒であり、適切に機能させる方法がわかりません。もっと簡単な方法があるようです — 何か足りないのでしょうか?

4

11 に答える 11

218

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
于 2010-07-14T19:54:34.643 に答える
77

date -d @1278999698 +'%Y-%m-%d %H:%M:%S' 後ろ@の数字は秒数です

于 2010-07-14T20:01:52.657 に答える
26

このソリューションは、サポートされていないバージョンの日付で機能します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 タイムスタンプを日付に変換

于 2013-01-01T01:53:37.210 に答える
11

@TomMcKenzieが別の回答へのコメントで述べているようにdate -r 123456789、Unixエポック以降の秒単位の時間に対するより一般的な(つまり、より広く実装されている)単純なソリューションであることは間違いありませんが、残念ながら普遍的に保証された移植可能なソリューションはありません。

多くの種類のシステムでのオプションは、GNU Date の拡張機能-dとはまったく異なるものを意味します。残念ながら、GNU Date はこれらの他の実装と同じように--date解釈しません。-r残念ながらdate、使用している のバージョンを知る必要があり、古い Unixdateコマンドの多くはどちらのオプションもサポートしていません。

さらに悪いことに、POSIXは、コマンドラインからUnix時間をフォーマットするための標準的な方法をまったくdate認識せ-d-r、提供しません(私が知っている)(POSIX Awkにも がないためstrftime())。(前者は Unix エポックからの秒数として指定された時間を受け入れないため、touch -tandは使用できません。)ls

ただし、Brian Kernighan から直接入手できる One True Awk には、strftime()関数が組み込まれているだけでなくsystime()、Unix エポック以降の現在の時刻を秒単位で返す関数もあるため、おそらく Awk ソリューションが最も移植性が高いことに注意してください。

于 2013-01-01T03:24:23.853 に答える
4

表記がぎこちない場合は、 - オプションが役立つかもしれません-R。RFC 2822 形式で日付を出力します。したがって、これらすべての識別子は必要ありません: date -d @1278999698 -R. もう 1 つの可能性は、ロケールで日付を秒単位で出力することですdate -d @1278999698 +%c。覚えやすいはずです。:-)

于 2010-07-14T20:06:47.440 に答える
2

標準の Perl ソリューションは次のとおりです。

echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'

(または、必要に応じて現地時間)

于 2012-11-06T18:50:15.473 に答える
1

ここにある他の例は、覚えにくいものです。最も簡単に:

date -r 1305712800
于 2015-06-30T22:02:24.547 に答える
1
awk 'BEGIN { print strftime("%c", 1271603087); }'
于 2010-07-14T19:51:34.250 に答える