我可以使用 非常灵活地格式化日期和时间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()
。
对于git
s --date=format
,您还需要附加-local
, ,以便将日期表示为本地时间而不是提交中存储的时区。所以:
TZ=UTC0 git log --date=format-local:'%Y %m %d-%T'