Date

從 GMT 時間戳獲取紀元時間

  • October 22, 2021

我必須從 GMT 時間戳計算日期紀元時間,但我在本地不在那個時區。我目前的當地時間是 CEST。

所以當我嘗試計算紀元時間時

date -d "2017-08-05 10:10:10" "+%s"

我明白了

1501927810

但是給定的時間是格林威治標準時間,因此應該導致

1501927810

我試圖手動添加當地時間和格林威治標準時間之間的小時差

date -d "2017-08-05 10:10:10 +2 hours" "+%F %T"

但這給了我

2017-08-05 11:10:10

為什麼只增加了+1小時!?

您可以date通過設置環境變數來告知使用 GMT 時區TZ

$ TZ=GMT date -d "2017-08-05 10:10:10" "+%s"
1501927810

否則,您必須將日期字元串指定為 GMT(+0 小時,而不是 2):

$ date -d "2017-08-05 10:10:10 +0" "+%s"
1501927810

您可以將原始日期所在的已知時區添加到日期字元串中:

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

如果您已經有一個日期字元串,並且您知道它來自不同的時區並且想要它的紀元時間戳,那麼使用TZenv var 也將不起作用:

TZ=GMT date -d "2017-08-05 10:10:10" "+%s"
1501927810

產生與以下相同的時間戳:

TZ=PST date -d "2017-08-05 10:10:10" "+%s"
1501927810

引用自:https://unix.stackexchange.com/questions/384672