日期格式化字符说明

本文介绍了Java中用于将日期时间格式化为字符串的常用字符和符号,通过实例展示了如何使用SimpleDateFormat进行日期解析,并提醒了时区处理中的注意事项。
摘要由CSDN通过智能技术生成

1、用于将日期时间格式化为字符串的字符

下表列出了可以在模式中用来格式化或解析与日期时间相关的字符串的字符。如下表所示:

符号含义表示示例
aAM 或 PM 标记Text输入 am、AM、pm、PM。输出 AM 或 PM
d一月中的某一天(1-31)Number1、20
dd一月中的某一天(01-31)Number01、31
D一年中的某一天(1-366)Number3、80、100
DD一年中的某一天(01-366)Number03、80、366
DDD一年中的某一天(001-366)Number003
e一周中的某一天(1-7)1Number2
EEE一周中的某一天1TextTue
EEEE一周中的某一天1TextTuesday
F一月中某一周的某一天(1-5)2Number2
G时代TextBC 或 AD
h用 AM 或 PM 表示的小时(1-12)Number6
hh用 AM 或 PM 表示的小时(01-12)Number06
H24 小时格式的时间(0-23)3Number7
HH24 小时格式的时间(00-23)3Number07
IISO8601 日期/时间(最多 yyyy-MM-dd’T’HH:mm:ss. SSSZZZ)4Text2006-10-07T12:06:56.568+01:00
IUISO8601 日期/时间(类似于 I,但是如果时区为 +00:00,那么 ZZZ 输出为“Z”)4Text2006-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z
k24 小时格式的时间(1-24)3Number8
kk24 小时格式的时间(01-24)3Number08
K用 AM 或 PM 表示的小时(0-11)Number9
KK用 AM 或 PM 表示的小时(00-11)Number09
mNumber4
mmNumber04
M月(数值)Number5、12
MM月(数值)Number05、12
MMM月(字母)TextJan、Feb
MMMM月(字母)TextJanuary、February
sseconds5Number5
ssseconds5Number05
Sdecisecond6Number7
SScentisecond6Number70
SSSmillisecond6Number700
SSSS0.0001 秒6Number7000
SSSSS0.00001 秒6Number70000
SSSSSS0.000001 秒6Number700000
TISO8601 时间(最多为 HH:mm:ss.SSSZZZ)4Text12:06:56.568+01:00
TUISO8601 时间(类似于 T,但是 +00:00 时区用“Z”替换)4Text12:06:56.568+01:00、15:42:12.000Z
w一年中的某一周7Number7、53
ww一年中的某一周7Number07、53
W一月中的某一周8Number2
yyyear9Number06
yyyyyear9Number2006
YY年:仅与年中的周结合使用7Number06
YYYY年:仅与年中的周结合使用7Number2006
zzz时区(简称)10TextEST
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)TextGMT+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、参考链接

用于将日期时间格式化为字符串的字符


  1. “一周中的某一天”字段是一周中的数字偏移量并且会根据物理消息集属性一周中的第一天而改变。 例如,如果将物理消息集属性一周中的第一天设置为星期一,那么一周中的第三天就是星期三。 ↩︎

  2. 12th 2006 年 7 月是 7 月的第二个星期三,可以表示为2006 July Wednesday 2使用格式字符串yyyy MMMM EEEE F。请注意,此格式不表示 2006 年 7 月 2 日的第 2 周的星期三,即 5th 2006 年 7 月; 此格式的字符串为yyyy MMMM EEEE W. ↩︎

  3. 如果使用冲突的 am/pm 字段指定,24 小时字段可能产品有歧义的时间。 ↩︎ ↩︎ ↩︎ ↩︎

  4. 请参阅 ISO8601, I 和 T 日期时间标记. ↩︎ ↩︎ ↩︎ ↩︎

  5. 秒s &ss,必须在范围 0-59 内。 如果您需要构造一个 TIMESTAMP 来表示闰秒期间的时间,且要创建或强制转换的值要使用值 60 作为秒数,那么您必须在 ESQL 代码中处理此情况。 产品中的 CURRENT_ datetime 函数(例如 CURRENT_TIME)从不会生成秒值超出 0-59 范围的时间。 ↩︎ ↩︎

  6. 小数秒由大写 S 表示。 长度必须与输入中格式符号数目隐式匹配。 格式字符串ss SSS或ss.SSS例如,表示秒数和毫秒数。 但是,格式字符串ss.sss表示重复字段 (以秒为单位); 周期 (.) 后的值将作为秒字段,而不是作为小数秒。 输出将截断到指定长度。 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  7. 一年的开始通常是在一周的某天。 如果这一周中的天数小于一年中第一个星期的天数物理消息集属性所指定的值,就认为这一周是上一年的最后一周;因此第一周从新年中的某天开始。 否则,就认为这一周是新年的第一周;在这种情况中,第一周在新年前的之几天开始。 例如, 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. ↩︎ ↩︎ ↩︎ ↩︎

  8. 一月中的第一周和最后一周可能包含相邻月份的天数。 例如,周一 31st 2006 年 7 月可以表示为 2006 年 8 月第一周的星期一,即2006 08 1 Monday使用格式字符串yyyy MM W EEEE. ↩︎

  9. 年是作为特殊情况处理的:
    在输出时,如果计数为y是2,年份将截断为 2 位数字。 例如,如果yyyy生成2006,yy生成06.
    在输入时,对于 2 位数年份,将使用物理消息集属性世纪的开始采用 2 位数年份来确定世纪。 例如,如果将世纪的开始采用 2 位数年份设置为 53,97 年将是 1997,52 年是 2052,而 53 年是 1953。 ↩︎ ↩︎

  10. 使用zzz选项可能有不明确的结果。 例如:BST可以解释为Bangladesh Standard Time或British Summer Time. 出于兼容性原因, IBM® Integration Bus 使用先前的解释。
    要避免这些问题,请使用zzzz具有明确定义的名称的选项; 例如,欧洲/伦敦,亚洲/达卡或美洲/洛杉矶。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值