web-dev-qa-db-ja.com

UTC時間を秒単位で取得します

秒でbash UTC日付を取得することができないようです。私はシドニーにいるので+ UTC 10時間

 date
 Thu Jul 3 17:28:19 WST 2014

 date -u
 Thu Jul 3 07:28:20 UTC 2014

しかし、変換しようとすると、UTC時間ではない同じ結果が得られます

 date +%s
 1404372514

 date -u +%s
 1404372515

ここで何が欠けていますか?


date +%sがUTC時間を返しているという回答を得た後、現在直面している問題の詳細を以下に示します。

ファイルに書かれた日付とpythonを比較しようとしています。この日付はUTC時間で秒単位で書き込まれます。そして、bash date +%sは私に同じものを与えません。実際、python time.asctime(time.localtime(date_in_seconds_from_bash))で実行している場合、UTCではなくシドニーの現在時刻を取得します。分かりません。

43

+%sはエポックからの秒数だと思います。タイムゾーンは不変です。

21
JamesNoonan33

これが結果として意図されたものであるに違いない。

$ date -u --date=@1404372514
Thu Jul  3 07:28:34 UTC 2014
13
Derek Boonstra

あなたが使用していると言います:

time.asctime(time.localtime(date_in_seconds_from_bash))

ここで、date_in_seconds_from_bashはおそらくdate +%sの出力です。

time.localtime関数は、その名前が示すとおり、ローカル時間を提供します。

UTCが必要な場合は、time.gmtime()ではなくtime.localtime()を使用します。

JamesNoonan33の答え が示すように、date +%sの出力はタイムゾーン不変であるため、date +%sdate -u %sとまったく同じです。 「エポック」からの秒数、つまり1970-01-01 00:00:00 UTCを出力します。質問で表示される出力は、それと完全に一致しています。

date -u
Thu Jul 3 07:28:20 UTC 2014

date +%s
1404372514   # 14 seconds after "date -u" command

date -u +%s
1404372515   # 15 seconds after "date -u" command
7
Keith Thompson

現在の時刻とエポックからの秒数の両方として現在のUTCをすばやく取得するために、この行を~/.bash_profile(または similar )に追加することを検討できます。

alias utc='date -u && date -u +%s'

2
Adam