# 时间格式ISO 8601标准表示
2025-05-05T15:42+08:00
注意:T是写死的。标准规定的。
# 逐段解析:
部分 | 含义 | 示例值说明 |
---|---|---|
2025 | 年份(4位) | 2025年 |
-05 | 月份(2位,01-12) | 5月 |
-05 | 日期(2位,01-31) | 5日 |
T | 日期与时间的分隔符 | 固定字符 |
15 | 小时(24小时制,00-23) | 15时(下午3点) |
:42 | 分钟(00-59) | 42分 |
+08:00 | 时区偏移(相对于UTC) | 东八区(北京时间) |
# 关键点说明:
- 时区部分
+08:00
:+
表示东时区,-
表示西时区08:00
表示比UTC(世界协调时)早8小时- 中国标准时间(CST)就是UTC+8
T
分隔符:- ISO 8601 标准要求日期和时间用
T
连接 - 实际应用中有时会用空格替代(但不符合标准)
- ISO 8601 标准要求日期和时间用
- 省略秒和毫秒:
- 如果精度到秒会显示
:00
- 毫秒用
.000
表示(如15:42:30.500
)
- 如果精度到秒会显示
其他等效表示:
- UTC 时间:
2025-05-05T07:42Z
(去掉8小时时区差,Z
表示UTC) - 无时区:
2025-05-05T15:42
(不推荐,易产生歧义) - 本地化显示:
2025年5月5日 15:42(北京时间)
# 代码中如何处理(Java示例):
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
String isoStr = "2025-05-05T15:42+08:00";
// 解析为带时区的时间对象
OffsetDateTime odt = OffsetDateTime.parse(isoStr);
// 格式化为本地显示
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日 HH:mm (ZZZZ)");
String localStr = odt.format(formatter);
// 输出:2025年5月5日 15:42 (GMT+08:00)
// 转换为时间戳(毫秒)
long timestamp = odt.toInstant().toEpochMilli();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 常见使用场景:
- API 接口:HTTP 头部的
Last-Modified
、Expires
- 日志系统:标准化时间记录
- 数据库存储:MySQL 的
TIMESTAMP WITH TIME ZONE
- 国际协作:避免时区混淆
# 总结
这种格式的优势是无歧义且可排序(字符串直接按字典序比较就是时间顺序)。