UNIXタイムスタンプがあり、フォーマットされた日付を取得したい(そのタイムスタンプに対応するdate
)の出力。
これまでの私の試み:
$ date +%s 1282367908 $ date -d 1282367908 date: invalid date `1282367908" $ date -d +1282367908 date: invalid date `+1282367908" $ date +%s -d +1282367908 date: invalid date `+1282367908"
次のような出力を取得できるようにしたい:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
回答
Mac OS XおよびBSDの場合:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
GNUコアツールを使用(そのための情報ファイルを調べる必要があります):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
どちらの場合も、-u
(標準)オプションを追加するか、TZ=UTC0
環境変数(TZ=UTC0
は、UTCからのオフセット0でUTC
と呼ばれるタイムゾーンを定義します TZ=UTC
(オフセットなし)の動作は指定されていません(ただし、ほとんどのシステムではシステム定義を参照します)タイムゾーンはUTC
とも呼ばれ、UTCからのオフセットは0です))。
コメント
回答
このperlワンライナーがそれを行います:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
回答
グーグルした後、コマンドのみ:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
コメント
- ありがとうございます。 'もっとシンプルなものにしたいと思っていたので、今は賛成票を投じてください。
- Googleがあなたをバカにするもう1つの素晴らしい例です。誰もドキュメントをもう読んでいませんか?
- @hop、
date -d @xxx
のサポートは2005年のcoreutils5.3まで追加されませんでした。'その前にどのようにそれをしなければならなかったか。 - @St é faneChazelas:a)この回答は2010年のものであり、b)なぜこれが行われるのかドキュメントを読む前にグーグルを言い訳しますか?自分の権威から答えれば、このような間違いを許すことができますが、とにかく調べなければならない場合は、正しく調べてください。
- @hop、私はそれがそうではなかったことを指摘していましたばかげた答え、ただ時代遅れの答え。
答え
シェルが組み込まれている場合:
-
zsh
(4.1.1(2003)以降):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000)以降):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2(2010)以降):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
これらすべてで、%c
を必要なstrftime()
形式に置き換えます。
コメント
-
bash
printf
解決策? - 気にしないでください、 diの
printf
の説明で見つけましたv> gnu.org/software/bash/manual/bashref.html#Bash-Builtins 。
回答
osxで、UTCで使用する
date -r "1475737200" -u
コメント
- ありがとうございます。 '承認された回答でそれを編集して、情報をより簡単に入手できるようにしました。
回答
古い質問に答えますが、他の誰かがこれを検索した場合、これは改善になるかもしれないと思います。このBash関数はLinuxとOSXの両方で機能します。他のBSDシステムではテストしていません。この関数の引数としてエポック時間を渡すと、RFC-3339の時間形式が出力されます。
epochtorfc3339 () { RFC3339_FORMAT="+%FT%T:::%z" EPOCH=$(echo $@ | sed -n "s/.*\([0-9]\{10\}\).*/\1/p"); if date --version >/dev/null 2>/dev/null; then # Linux date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${EPOCH} seconds" #date -d @${EPOCH} --rfc-3339=seconds else # OS X/BSD date -r ${EPOCH} ${RFC3339_FORMAT} fi }
回答
現代のUnixの豊かな遺産のもう1つの素晴らしい例。これは、ほとんどのBSDバリアントで実際に可能です:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(ところで、あなたの例は1秒ずれているようです)
コメント
- Linuxでは'は機能しません。 hop 'の回答にはLinuxの正しい回答があるようです。それを指摘してくれてありがとう、私はそのようなことが起こるのではないかと思った。'今45秒にした。
info coreutils date
をもう少し注意深く読む必要がありました。date -r 1447264553943
の結果Wed Dec 28 01:39:03 BRST 47831
で、'が実際に11/11/2015, 3:55:53 PM GMT-2:00
である場合。