1、用于将日期时间格式化为字符串的字符
下表列出了可以在模式中用来格式化或解析与日期时间相关的字符串的字符。如下表所示:
符号 | 含义 | 表示 | 示例 |
---|---|---|---|
a | AM 或 PM 标记 | Text | 输入 am、AM、pm、PM。输出 AM 或 PM |
d | 一月中的某一天(1-31) | Number | 1、20 |
dd | 一月中的某一天(01-31) | Number | 01、31 |
D | 一年中的某一天(1-366) | Number | 3、80、100 |
DD | 一年中的某一天(01-366) | Number | 03、80、366 |
DDD | 一年中的某一天(001-366) | Number | 003 |
e | 一周中的某一天(1-7)1 | Number | 2 |
EEE | 一周中的某一天1 | Text | Tue |
EEEE | 一周中的某一天1 | Text | Tuesday |
F | 一月中某一周的某一天(1-5)2 | Number | 2 |
G | 时代 | Text | BC 或 AD |
h | 用 AM 或 PM 表示的小时(1-12) | Number | 6 |
hh | 用 AM 或 PM 表示的小时(01-12) | Number | 06 |
H | 24 小时格式的时间(0-23)3 | Number | 7 |
HH | 24 小时格式的时间(00-23)3 | Number | 07 |
I | ISO8601 日期/时间(最多 yyyy-MM-dd’T’HH:mm:ss. SSSZZZ)4 | Text | 2006-10-07T12:06:56.568+01:00 |
IU | ISO8601 日期/时间(类似于 I,但是如果时区为 +00:00,那么 ZZZ 输出为“Z”)4 | Text | 2006-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z |
k | 24 小时格式的时间(1-24)3 | Number | 8 |
kk | 24 小时格式的时间(01-24)3 | Number | 08 |
K | 用 AM 或 PM 表示的小时(0-11) | Number | 9 |
KK | 用 AM 或 PM 表示的小时(00-11) | Number | 09 |
m | 分 | Number | 4 |
mm | 分 | Number | 04 |
M | 月(数值) | Number | 5、12 |
MM | 月(数值) | Number | 05、12 |
MMM | 月(字母) | Text | Jan、Feb |
MMMM | 月(字母) | Text | January、February |
s | seconds5 | Number | 5 |
ss | seconds5 | Number | 05 |
S | decisecond6 | Number | 7 |
SS | centisecond6 | Number | 70 |
SSS | millisecond6 | Number | 700 |
SSSS | 0.0001 秒6 | Number | 7000 |
SSSSS | 0.00001 秒6 | Number | 70000 |
SSSSSS | 0.000001 秒6 | Number | 700000 |
T | ISO8601 时间(最多为 HH:mm:ss.SSSZZZ)4 | Text | 12:06:56.568+01:00 |
TU | ISO8601 时间(类似于 T,但是 +00:00 时区用“Z”替换)4 | Text | 12:06:56.568+01:00、15:42:12.000Z |
w | 一年中的某一周7 | Number | 7、53 |
ww | 一年中的某一周7 | Number | 07、53 |
W | 一月中的某一周8 | Number | 2 |
yy | year9 | Number | 06 |
yyyy | year9 | Number | 2006 |
YY | 年:仅与年中的周结合使用7 | Number | 06 |
YYYY | 年:仅与年中的周结合使用7 | Number | 2006 |
zzz | 时区(简称)10 | Text | EST |
zzzz | 时区(全称) | Text | 东部标准时间 |
Z | 时区(+/-n) | Text | +3 |
ZZ | 时区(+/-nn) | Text | +03 |
ZZZ | 时区(+/-nn:nn) | Text | +03:00 |
ZZZU | 时区(如同 ZZZ,“+00:00”由“Z”替换) | Text | +03:00、Z |
ZZZZ | 时区(GMT+/-nn:nn) | Text | GMT+03:00 |
ZZZZZ | 时区(如同 ZZZ,但是无冒号)(+/-nnnn) | Text | +0300 |
’ | 文本的转义 | ‘User text’ | |
" | (两个单引号)转义文本中的单引号 | ‘o"clock’,加引号的自定文本 |
2、举2个例子
自定义字符串“GMT-8”,使用表格中的“(两个单引号)转义文本中的单引号”符号,格式化为正确的Date类型。
val dateString = "Thu, 18 Jan 2024 09:57:58 GMT-8"
val inputFormat = SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT-8'", Locale.US)
val date: Date = inputFormat.parse(dateString)
println(date)
输出结果如下:
System.out: Thu Jan 18 09:57:58 GMT+08:00 2024
使用标准时区ZZZZ字符,这种GMT+03:00时间格式后缀,转化为Date类型进行输出:
val dateString1 = "Thu Jan 18 09:57:58 GMT+08:00 2024"
val sdf = SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZ yyyy", Locale.US)
val date1: Date = sdf.parse(dateString1)
println(date1)
输出结果如下:
System.out: Thu Jan 18 09:57:58 GMT+08:00 2024
注意使用的是Locale.US ,英文时间,如果换成Locale.getDefault(),将会报错。GMT-8 是西八区(时区)属美洲时间
3、参考链接
“一周中的某一天”字段是一周中的数字偏移量并且会根据物理消息集属性一周中的第一天而改变。 例如,如果将物理消息集属性一周中的第一天设置为星期一,那么一周中的第三天就是星期三。 ↩︎
12th 2006 年 7 月是 7 月的第二个星期三,可以表示为2006 July Wednesday 2使用格式字符串yyyy MMMM EEEE F。请注意,此格式不表示 2006 年 7 月 2 日的第 2 周的星期三,即 5th 2006 年 7 月; 此格式的字符串为yyyy MMMM EEEE W. ↩︎
秒s &ss,必须在范围 0-59 内。 如果您需要构造一个 TIMESTAMP 来表示闰秒期间的时间,且要创建或强制转换的值要使用值 60 作为秒数,那么您必须在 ESQL 代码中处理此情况。 产品中的 CURRENT_ datetime 函数(例如 CURRENT_TIME)从不会生成秒值超出 0-59 范围的时间。 ↩︎ ↩︎
小数秒由大写 S 表示。 长度必须与输入中格式符号数目隐式匹配。 格式字符串ss SSS或ss.SSS例如,表示秒数和毫秒数。 但是,格式字符串ss.sss表示重复字段 (以秒为单位); 周期 (.) 后的值将作为秒字段,而不是作为小数秒。 输出将截断到指定长度。 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
一年的开始通常是在一周的某天。 如果这一周中的天数小于一年中第一个星期的天数物理消息集属性所指定的值,就认为这一周是上一年的最后一周;因此第一周从新年中的某天开始。 否则,就认为这一周是新年的第一周;在这种情况中,第一周在新年前的之几天开始。 例如, 2004 年第 1 周的星期一 (2004 年第 1 周的星期一,其中每年第 1 周 4 天数 = 4 ,第 1 周的第 1 天 = 星期一) 使用格式字符串YYYY ww EEEE实际上是 29th 2003 年 12 月。 如果您使用Y,一周中的第几天 (E) 和一年中的周 (w) 在必要时进行调整,以指示日期在上一年。
如果使用小写字母y符号,那么不会进行调整,并且可能会对年底前后的日期产生不可预测的结果。 例如,如果将字符串 2002 01 Monday 格式化:
2002 年第 1 周的星期一 (使用格式字符串)YYYY ww EEEE正确解释为31st December 2001
2002 年第 1 周的星期一 (使用格式字符串)yyyy ww EEEE被错误地解释为30th December 2002
使用Y与w仅当您未指定w,使用y. ↩︎ ↩︎ ↩︎ ↩︎一月中的第一周和最后一周可能包含相邻月份的天数。 例如,周一 31st 2006 年 7 月可以表示为 2006 年 8 月第一周的星期一,即2006 08 1 Monday使用格式字符串yyyy MM W EEEE. ↩︎
年是作为特殊情况处理的:
在输出时,如果计数为y是2,年份将截断为 2 位数字。 例如,如果yyyy生成2006,yy生成06.
在输入时,对于 2 位数年份,将使用物理消息集属性世纪的开始采用 2 位数年份来确定世纪。 例如,如果将世纪的开始采用 2 位数年份设置为 53,97 年将是 1997,52 年是 2052,而 53 年是 1953。 ↩︎ ↩︎使用zzz选项可能有不明确的结果。 例如:BST可以解释为Bangladesh Standard Time或British Summer Time. 出于兼容性原因, IBM® Integration Bus 使用先前的解释。
要避免这些问题,请使用zzzz具有明确定义的名称的选项; 例如,欧洲/伦敦,亚洲/达卡或美洲/洛杉矶。 ↩︎