Java 日期时间格式化标准

news/2025/1/8 12:21:45/

文章目录

  • Java日期时间格式化符号
  • ISO 8601中的日期时间
    • ISO 8601标准的定义
    • ISO 8601日期时间格式
  • 周数年份
    • ISO 8601中的周数年份
    • Java中的周数年份
  • Java跨年日期格式化BUG
  • 注意事项


Java日期时间格式化符号

JDK官网截图:
在这里插入图片描述

格式化符号梳理:

符号描述符号用法示例
G公历纪元G:公历纪元AD(公元) 、BC(公元前)
y年份yy:两位年份
yyyy:四位年份
24
2024
Y年份(ISO周数所在年份,可能跨年)YY:两位年份
YYYY:四位年份
25
2025
M月份M:月份(不带零)
MM:月份(不带零)
MMM:月份缩写
MMMM:月份全写
1
01
Jan一月
January一月
dd:单位数字或两位数字
dd:两位数字
6
06
H小时(24小时制)H:小时(24小时制,不带零)
HH:小时(24小时制,带零)
9
09
h小时(12小时制)h:小时(12小时制,不带零)
hh:小时(12小时制,带零)
9
09
m分钟m:分钟(不带零)
mm:分钟(带零)
5
05
ss:秒(不带零)
ss:秒(带零)
3
03
S毫秒S:毫秒(不带零)
SSS:毫秒(带零)
56
056
E星期EEE:星期缩写
EEEE:星期全写
Mon星期二
Monday星期二
u星期(数字)u:星期(数字)1234567
w周数(年内的第几周)w:年内第几周2(表示年内的第2周)
W周数(月内的第几周)W:月内的第几周2(该月的第2周)
F月份中的第几个周几F:月份中的第几个星期几2(该月的第二个星期x)
D年中天数D:一年中的第几天6(一年中的第6天)
aAM/PMa:上午或下午的标记AMPM上午下午
Z时区偏移Z:时区偏移(格式:+0800+0800(UTC+8时区)
X时区偏移(ISO 8601格式)X:时区偏移(ISO 8601格式,格式:+08+08(UTC+8时区)
z时区(时区名称)z:时区缩写
zzzz:时区全称
CST(时区缩写)
中国标准时间 (时区全称)
'文字字符(原样输出)'':原样输出字符'星期天'(原样输出 :星期天

ISO 8601中的日期时间

ISO 8601标准的定义

  • 一年中的第一个周:一年中的第一个周是包含该年的第一个星期四的周。这意味着该年的第一个周可能会跨越前一年和当前年。
  • 每周的起始日:ISO-8601将周的起始日定义为星期一。
  • 每周的结束日:ISO-8601将周的结束日定义为星期日。

ISO 8601日期时间格式

ISO 8601规定了一种标准的日期和时间表示方式,以确保在全球范围内的一致性。以下是ISO 8601的基本格式:

  • 日期格式:YYYY-MM-DD

    • YYYY表示四位数的年份
    • MM表示两位数的月份
    • DD表示两位数的日期
  • 时间格式:hh:mm:ss

    • hh表示两位数的小时
    • mm表示两位数的分钟
    • ss表示两位数的秒
  • 日期时间格式:YYYY-MM-DDThh:mm:ss

    • 使用字母’T’来分隔日期和时间

周数年份

在日期时间处理时,通常有两种不同的年份表示方式:

  • 常规年份:这是基于日历年(公历年),即我们通常使用的年份。

    例如:2024年12月31日的年份是2024

  • 周数年份:周数年份是根据一年的第一个完整星期来定义的,通常在需要进行国际化或跨年时间计算时使用。

    例如:ISO 8601 标准规定了一个系统,其中一周的第一天是星期一,并且第一周是包含该年1月4日的那一周。周数年份与常规年份可能并不完全一致。2024年12月31日的周数年份是2025

ISO 8601中的周数年份

在日期时间处理时,通常有两种不同的年份表示方式:

  • 常规年份:这是基于日历年(公历年),即我们通常使用的年份。

    例如:2025年1月1日的年份是2025

  • ISO周数年份:这是基于ISO 8601标准的年份,周数是基于一周中的第一天(周一)来计算的。

    ISO 8601定义:一年的第一周是包含该年首个周四的那一周,所以ISO年份可能与日历年份不同

    例如:2024年12月31日的ISO周数年份是2025

Java中的周数年份

需要注意:分析发现Java中的周数年份与ISO 8601的是有区别的(正确性不太确定,至少使用SimpleDateFormat格式化是这样的)。

Java中和ISO 8601中的周数年份(Y)对比:

  • Java 中的周数年份(正确性不太确定):

    • 一年的第一周:是包含1月1日的那一周,如果该周(星期日 ~ 星期六)有几天在上一年中,那么这几天所属年份也为该年
    • 每周的起始日:星期日
    • 每周的结束日:星期六
  • ISO 8601中的周数年份:

    • 一年的第一周:是包含该年首个周四的那一周,如果该周(星期一 ~ 星期日)有几天在上一年中,那么这几天所属年份也为该年
    • 每周的起始日:星期一
    • 每周的结束日:星期日

Java跨年日期格式化BUG

误用YYYY可能导致年份错误,具体原因参考上文,需改为使用yyyy。

例如,时间为2024-12-31

  • yyyy-MM-dd,输出:2024-12-31
  • YYYY-MM-dd,输出:2025-12-31

注意事项

  • 在一些西方国家,通常把星期日作为一周的第一天;Java(使用SimpleDateFormat格式化)也是如此,把星期日作为一周的第一天。

http://www.ppmy.cn/news/1561547.html

相关文章

git撤回提交、删除远端某版本、合并指定版本的更改

撤回提交 vscode的举例 一、只提交了还未推送的情况下 1.撤回最后一次提交,把最后一次提交的更改放到暂存区 git reset --soft HEAD~12.撤回最后一次提交,把最后一次提交的更改放到工作区 git reset --mixed HEAD~13.撤回最后一次提交,不…

香橙派安装 opencv 4.9.0

香橙派Orange AI Pro / 华为昇腾310 使用源码方式安装opencv 4.9.0 下载源码到香橙派 https://opencv.org/releases/ 解压 unzip opencv-4.9.0.zip1代码解读 进入解压后的文件 cd opencv-4.9.01代码解读 创建构建目录build mkdir build1代码解读 进入目录 cd build1代码解读 使…

【Axure高保真原型】曲线面积图组

今天和大家分享曲线面积图组的原型模板,鼠标移入对应区域,会显示具体数据,这个原型模板是用Axure原生元件制作的,所以不需要联网或调用接口,具体效果可以打开下方原型地址体验或者点击下方视频观看 【原型效果】 【Ax…

OpenCV轮廓相关操作API (C++)

在OpenCV中,轮廓(contours)是图像处理中的一个重要概念,通常用于形状分析、物体检测等任务。OpenCV提供了多种与轮廓相关的API,可以在C中使用。 一.常用的与轮廓相关的操作及其对应的API函数 1.查找轮廓 findContou…

【微服务】1、引入;注册中心;OpenFeign

微服务技术学习引入 - 微服务自2016年起搜索指数持续增长,已成为企业开发大型项目的必备技术,中高级java工程师招聘多要求熟悉微服务相关技术。微服务架构介绍 概念:微服务是一种软件架构风格,以专注于单一职责的多个响应项目为基…

剧本字幕自己看

Hello English learners! Welcome back to my channel! My name is Ethan, and today we’re diving into a topic we deal with every day—traffic. 大家好,英语学习者们!欢迎回到我的频道!我是Ethan,今天我们要聊一个每天都会遇到的话题——交通。 When I drive somewh…

【嵌入式硬件】直流电机驱动相关

项目场景: 驱动履带车(双直流电机)前进、后退、转弯 问题描述 电机驱动MOS管烧毁 电机驱动采用IR2104STRH1R403NL的H桥方案(这是修改之后的图) 原因分析: 1.主要原因是4路PWM没有限幅,修改…

HTML5 弹跳动画(Bounce Animation)详解

HTML5 弹跳动画(Bounce Animation)详解 弹跳动画是一种动态效果,使元素在出现或消失时看起来像是在跳动。这种效果可以通过 CSS 动画或 JavaScript 来实现,增强用户体验。 1. 使用 CSS 实现弹跳动画 可以使用 CSS 的 keyframes…