使用 strftime 将日期时间格式化为 UTC(用于 git)

使用 strftime 将日期时间格式化为 UTC(用于 git)

我可以使用 非常灵活地格式化日期和时间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匹配的格式。用于定义自定义格式的选项委托给 system 。我在 Mac OSX Monterey 上并使用 bash 。编辑:解决方案稍微复杂一些,因为在 git 中使用;更改了问题描述以反映这一点。)go.mod--date=format:'%foo%bar'strftime

答案1

C函数strftime()仅格式化日期/时间。您可以gmtime()将获取 UTC 时间或localtime()本地时间的结果传递给它。

date默认情况下显示本地时间,但可以使用该选项指示显示 UTC 时间-u

localtime()time()根据指定时区的环境变量的内容计算给定纪元时间(如 所返回的值)的本地时间$TZ。如果未定义该变量,则系统之间的行为会有所不同。

如果您的工具始终显示本地时间并且无法被告知切换到世界时间,则您始终可以在$TZ指定与 UTC 零偏移量的时区的环境中调用它们。

TZ=UTC0 date

与以下效果相同:

date -u

TZ=UTC0定义了一个名为 的语言环境,UTC该语言环境与 UTC 的偏移量为 0,因此您可以获得 UTC 时间并date +%Z给出“UTC”,因此使用该值$TZ,的localtime()行为就像gmtime()

对于gits --date=format,您还需要附加-local, ,以便将日期表示为本地时间而不是提交中存储的时区。所以:

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

相关内容