Ubuntu
將時區偏移量添加到本地化時區
我正在嘗試在 Ubuntu 20.04 和 CentOS 7 中獲取與“昨天”(應理解為 1 天前)對應的日期字元串。到目前為止,我通過使用不存在的時區(例如
aaa
和應用 24 小時補償。也就是說,我嘗試執行的命令如下所示:YESTERDAY=`TZ=aaa24 date '+%y%m%d'`
這一切都很好,直到我意識到日期不適合我的時區。
我嘗試應用正確的時區(對我來說是歐洲/羅馬),但它停止正常工作。更確切地說:
TZ="Europe/Rome" date "+%Y%m%d %H:%M %Z" 20210208 08:25 CET TZ="Europe/Rome24" date "+%Y%m%d %H:%M %Z" 20210208 07:25 Europe
最後一個命令中顯示的時區聽起來好像它沒有正確理解時區,或者它使用了一個預設的“歐洲”時區,它似乎與 GMT 同步,同時忽略了偏移量。
我試圖刪除“子區域”
/Rome
進行一些嘗試,似乎在這種情況下正確理解了時區偏移:TZ="Europe" date "+%Y%m%d %H:%M %Z" 20210208 07:25 Europe TZ="Europe24" date "+%Y%m%d %H:%M %Z" 20210207 07:25 Europe
有沒有辦法將偏移量應用於特定的“子”時區,例如歐洲/羅馬?謝謝。
Ubuntu 和 CentOS 都使用 GNU 日期,因此請使用以下
-d
選項:$ date "+%Y%m%d %H:%M %Z" 20210209 10:09 EST $ date -d "yesterday" "+%Y%m%d %H:%M %Z" 20210208 10:09 EST
有關如何
date
解析參數的更多詳細資訊,請閱讀(或線上)-d
中的“日期輸入格式”info date
只是提醒一下,時間很奇怪,尤其是夏令時:在古巴,夏令時轉換發生在今年(2021 年)午夜 3 月 14 日。那天的午夜不存在:
$ env TZ=America/Havana date -d '2021-03-14' date: invalid date ‘2021-03-14’ # but $ env TZ=America/Havana date -d '2021-03-14 01:00:00' Sun Mar 14 01:00:00 CDT 2021
以天為單位進行日期運算可能與以小時為單位進行計算:讓我們轉到 3 月 15 日,然後在時間上倒退:
$ env TZ=America/Havana date -d '2021-03-15' '+%Y-%m-%d' 2021-03-15 $ env TZ=America/Havana date -d '2021-03-15 -1 day' '+%Y-%m-%d' 2021-03-14 $ env TZ=America/Havana date -d '2021-03-15 -24 hours' '+%Y-%m-%d' 2021-03-13
這是為什麼?因為古巴的 2021 年 3 月 14 日有 23 小時,所以減去 24 小時可以返回 1 天 1 小時:
$ env TZ=America/Havana date -d '2021-03-15' '+%Y-%m-%d %T' 2021-03-15 00:00:00 $ env TZ=America/Havana date -d '2021-03-15 -1 day' '+%Y-%m-%d %T' 2021-03-14 01:00:00 $ env TZ=America/Havana date -d '2021-03-15 -24 hours' '+%Y-%m-%d %T' 2021-03-13 23:00:00
這不僅限於古巴:任何具有 DST 的時區都會在時鐘向前移動的那一天進行。