GMTタイムスタンプに基づいて日付の起源時間を計算する必要がありますが、現地時間はそのタイムゾーンに属していません。現在の現地時間はCESTです。
だからエポック時間を計算しようとすると
date -d "2017-08-05 10:10:10" "+%s"
わかりました。
1501927810
しかし、与えられた時間はGMTなので、結果は次のようになります。
1501927810
現地時間とGMTの間の時間差を手動で追加しようとしています。
date -d "2017-08-05 10:10:10 +2 hours" "+%F %T"
しかし、これは私に与えます
2017-08-05 11:10:10
+1時間だけ追加された理由! ?
答え1
date
環境変数を設定して、使用するGMTタイムゾーンを指定できますTZ
。
$ TZ=GMT date -d "2017-08-05 10:10:10" "+%s"
1501927810
それ以外の場合は、日付文字列をGMT(2ではなく+ 0時間)として指定する必要があります。
$ date -d "2017-08-05 10:10:10 +0" "+%s"
1501927810
答え2
元の日付の既知のタイムゾーンを日付文字列に追加できます。
date -d "2017-08-05 10:10:10 GMT" +%s
1501927810
date -d "2017-08-05 10:10:10 PST" +%s
1501956610
他の回答で述べたように、夏時間の変更も考慮する必要がありますGMT
。
次の形式を使用することもできます。
date --date 'TZ="Europe/London" 2017-08-05 10:10:10' +%s
1501924210
これは環境変数の設定とは異なり、エポックタイムスタンプを使用するときは環境変数を使用することが機能しないことTZ
に注意してください。TZ
echo "TODAY: $(TZ=UTC date) : $(TZ=UTC date '+%s') YESTERDAY: $(TZ=UTC+24 date) $(TZ=UTC+24 date '+%s')"
TODAY: Fri Oct 15 21:57:12 UTC 2021 : 1634335032 YESTERDAY: Thu Oct 14 21:57:12 UTC 2021 1634335032
日付は正確ですが、エポックタイムスタンプは同じです。
これは働きます:
echo "TODAY: $(date) : $(date '+%s') YESTERDAY: $(date -d '24 hours ago') $(date -d '24 hours ago' '+%s')"
TODAY: Fri Oct 15 23:05:03 IST 2021 : 1634335503 YESTERDAY: Thu Oct 14 23:05:03 IST 2021 1634249103
これは、エポックタイムスタンプが単に特定の日付以降の秒数であるため、タイムゾーンの影響を受けないためです。これはどの時間帯にいても同じです。
したがって、別のタイムゾーンで特定の日付のエポックタイムスタンプが必要な場合は、次のように使用できます。
date -d "$(TZ=PST date)" +%s
すでに日付文字列があり、その文字列が別のタイムゾーンに属していることを知っていて、それをエポックタイムスタンプにしたい場合は、TZ
環境変数を使用しても機能しません。
TZ=GMT date -d "2017-08-05 10:10:10" "+%s"
1501927810
次のようなタイムスタンプを生成します。
TZ=PST date -d "2017-08-05 10:10:10" "+%s"
1501927810
答え3
タイムスタンプがUTC形式の場合は、date
次のオプションを使用してUTCの使用を示します-u
。
-u
、、、--utc
--universal
UTC(協定世界時)印刷または設定
答え4
GMTは、夏と冬の間に1時間の時間差がある時間帯(イギリス、ポルトガルなど)を説明するためによく使用されます。 8月にイギリスはGMT + 1に変わりますが、年中、その期間のラベルはBSTにもかかわらず、タイムゾーンはまだGMTとして説明されることがよくあります。タイムゾーンはdate
「Europe / London」として記録されます。 (元のタイムゾーンは日付定義で宣言されています。設定で表示するターゲットタイムゾーンを選択できます。TZ
外部コマンドはdate
通常の方法で環境変数として使用されます。 )
date --date 'TZ="Europe/London" 2017-08-05 10:10:10'
他の文脈では、GMTはUTCとほぼ同じ不変性を記述するために使用されます。ここで、タイムゾーンは単に「GMT」と指定されます。
date --date 'TZ="GMT" 2017-08-05 10:10:10'
タイムスタンプは対応するデータソースによって異なり、8月には1時間間隔になるため、これは重要です。