跳至主要内容

formatdate 函数

formatdate 将时间戳转换为不同的时间格式。

代码块
formatdate(spec, timestamp)

在 OpenTofu 语言中,时间戳通常使用 RFC 3339“日期和时间格式”语法表示为字符串。formatdate 要求 timestamp 参数为符合此语法的字符串。

示例

代码块
> formatdate("DD MMM YYYY hh:mm ZZZ", "2018-01-02T23:12:01Z")
02 Jan 2018 23:12 UTC
> formatdate("EEEE, DD-MMM-YY hh:mm:ss ZZZ", "2018-01-02T23:12:01Z")
Tuesday, 02-Jan-18 23:12:01 UTC
> formatdate("EEE, DD MMM YYYY hh:mm:ss ZZZ", "2018-01-02T23:12:01-08:00")
Tue, 02 Jan 2018 23:12:01 -0800
> formatdate("MMM DD, YYYY", "2018-01-02T23:12:01Z")
Jan 02, 2018
> formatdate("HH:mmaa", "2018-01-02T23:12:01Z")
11:12pm

规范语法

格式规范是一个字符串,其中包含下表中的格式化序列。此函数旨在生成常见的面向机器的时间戳格式,例如 RFC822、RFC850 和 RFC1123 中定义的格式。它不适用于真正面向人类的日期格式化,因为它不考虑区域设置。特别是,它只能生成英文的月份和日期名称。

规范可能包含以下序列

序列结果
YYYY四位(或更多位)数字年份,例如“2006”。
YY年份模 100,至少两位数字的零填充,例如“06”。
MMMM英文月份名称未缩写,例如“January”。
MMM英文月份名称缩写为三个字母,例如“Jan”。
MM月份数字零填充到两位数字,例如 1 月为“01”。
M月份数字不带填充,例如 1 月为“1”。
DD月份中的日期数字零填充到两位数字,例如“02”。
D月份中的日期数字不带填充,例如“2”。
EEEE英文星期几名称未缩写,例如“Monday”。
EEE英文星期几名称缩写为三个字母,例如“Mon”。
hh24 小时制数字零填充到两位数字,例如“02”。
h24 小时制数字不带填充,例如“2”。
HH12 小时制数字零填充到两位数字,例如“02”。
H12 小时制数字不带填充,例如“2”。
AA小时 AM/PM 标记大写,例如“AM”。
aa小时 AM/PM 标记小写,例如“am”。
mm小时内的分钟零填充到两位数字,例如“05”。
m小时内的分钟不带填充,例如“5”。
ss分钟内的秒数零填充到两位数字,例如“09”。
s分钟内的秒数,例如“9”。
ZZZZZ时区偏移量,用冒号分隔小时和分钟,例如“-08:00”。
ZZZZ时区偏移量,仅带符号和数字,例如“-0800”。
ZZZ类似ZZZZ,但 UTC 为“UTC”的特殊情况。
Z类似ZZZZZ,但 UTC 为“Z”的特殊情况。

任何非字母字符,例如标点符号,都会在输出中逐字复制。要在格式字符串中包含字面字母,请将它们括在单引号'中。要包含字面引号,请将其加倍转义。

代码块
> formatdate("h'h'mm", "2018-01-02T23:12:01-08:00")
23h12
> formatdate("H 'o''clock'", "2018-01-02T23:12:01-08:00")
11 o'clock

此格式规范语法旨在使读者即使不是语法专家也能轻松猜测结果格式。因此,没有为常用格式预定义简写,但下面给出了各种 RFC 指定格式的格式字符串,可根据需要复制到您的配置中

  • RFC 822RFC RFC 2822"DD MMM YYYY hh:mm ZZZ"
  • RFC 850"EEEE, DD-MMM-YY hh:mm:ss ZZZ"
  • RFC 1123"EEE, DD MMM YYYY hh:mm:ss ZZZ"

  • RFC 3339: "YYYY-MM-DD'T'hh:mm:ssZ"(但这也是输入格式,因此这种转换是冗余的。)
  • format 是一个用于任意数据的更通用的格式化函数。
  • timestamp 返回当前日期和时间,格式适合作为 formatdate 的输入。