Date
從 GMT 時間戳獲取紀元時間
我必須從 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
如果您已經有一個日期字元串,並且您知道它來自不同的時區並且想要它的紀元時間戳,那麼使用
TZ
env 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