web-dev-qa-db-ja.com

コマンドラインから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
63
Umang

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環境変数を渡してUTC日付(TZ=UTC0definesオフセット付きのUTCと呼ばれるタイムゾーン)を指定しますTZ=UTC(オフセットなし)の動作が指定されていない間、UTCから0(ほとんどのシステムでは、UTCとも呼ばれるシステム定義のタイムゾーンを参照し、UTCからのオフセット0)))。

98
user601

このPerlワンライナーはそれを行います:

$ Perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010
6
AlexD

いくつかグーグルした後、dateコマンドのみでそれを行う方法を見つけました。

$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010
6
AlexD

Shellビルトインの場合:

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

5

古い質問への回答ですが、他の誰かがこれを検索した場合、これは改善になると思います。このBash機能はLinuxとOS Xの両方で機能します。他の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
}
2
Noah Spurrier

OSXでは、UTCで

date -r "1475737200" -u
2
anyone

現代のUnixの豊かな遺産のもう1つのきちんとした例。これは、ほとんどのBSDバリアントで実際に可能です。

$ TZ=UTC date -r 1282368345
Sat Aug 21 05:25:45 UTC 2010

(ところであなたの例は1秒ずれているようです)

1
codehead