Bash

使用 strftime 將日期時間格式化為 UTC(用於 git)

  • March 22, 2022

我可以用 非常靈活地格式化日期和時間strftime,但據我所知,這只會給出我當地時區的時間;我可以添加時區偏移量(例如'%Y %m %d-%H:%M:%S%z',對於特定時間產量2022 02 14 16:21:35-0800),但我真正想要的是 UTC 的日期時間。(例如,2022 02 15 00:21:35。)這可能strftime嗎?

(上下文:我正在git log --date=format嘗試獲得與go.mod假版本匹配的格式。--date=format:'%foo%bar'用於定義自定義格式的選項,代表系統strftime。我在 Mac OSX Monterey 上並使用 bash。編輯:解決方案有點複雜,因為在 git 中使用;更改了問題描述以反映這一點。)

strftime()C 函式僅格式化日期/時間。您可以將結果傳遞給它gmtime()以獲取 UTC 時間或localtime()獲取本地時間。

date預設顯示本地時間,但可以通過該-u選項告知顯示 UTC 時間。

localtime()根據指定時區的環境變數time()的內容,從給定的紀元時間(如返回的值)計算本地時間。$TZ如果未定義該變數,則行為會因係統而異。

如果您的工具始終顯示本地時間並且無法被告知切換到通用時間,則您始終可以在$TZ指定時區的環境中呼叫它們,該時區與 UTC 具有恆定的零偏移量。

TZ=UTC0 date

與以下效果相同:

date -u

TZ=UTC0定義了一個名為UTCUTC 偏移量為 0 的語言環境,因此您將獲得 UTC 時間並date +%Z為您提供“UTC”,因此對於該值$TZlocaltime()其行為就像gmtime().

對於git’s --date=format,您還需要附加-local, 以將日期表示為本地時間,而不是儲存在送出中的時區。所以:

TZ=UTC0 git log --date=format-local:'%Y %m %d-%T'

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