Ubuntu

將時區偏移量添加到本地化時區

  • February 10, 2021

我正在嘗試在 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 的時區都會在時鐘向前移動的那一天進行。

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