コマンドラインからUNIXタイムスタンプのフォーマットされた日付を取得するにはどうすればよいですか

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です))。

コメント

  • 多くの時間がかかりますしかし、そのような一般的なタスクには驚くべきことです。
  • ありがとう、あなたの答えを受け入れました。 info coreutils dateをもう少し注意深く読む必要がありました。
  • これにより、日付が少し異なります:date -r 1447264553943の結果Wed Dec 28 01:39:03 BRST 47831で、'が実際に11/11/2015, 3:55:53 PM GMT-2:00である場合。
  • @falmp:マイクロ秒の代わりに秒を使用すると機能します。
  • @hop ops、年は47831であるはずですが、その数が多すぎて見逃しました。ありがとう!

回答

この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 
  • ksh93ksh93i(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()形式に置き換えます。

コメント

回答

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秒にした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です