1. 前言

因为Obisidian这个软件计时采用YYYY-MM dd HH:mm:ss格式的日期而Hugo不怎么能识别这种日期格式,所以我把日期格式化的相关知识写下来以备日后使用。

以下内容涵盖99%的计算机日期格式化场景(其余1%为不遵守或者日期格式较为独特的情况)。


1.1. 注意事项

  • 语言/库差异:不同编程语言的标记可能略有不同(如 Java 用 yyyy 而 JavaScript 用 YYYY)。

  • 大小写敏感:例如 MM(月份)和 mm(分钟)完全不同。

  • 兼容性:带 T 和 Z 的格式是 ISO 8601 标准,适合跨系统传输;其他格式可能更适合显示。


2. 教程

2.1. 日期部分

标记 字符串格式化 含义 示例(2025-07-22)
YYYY %Y 4位数年份 2025
YY %y 2位数年份 25
MMMM %B 月份完整名称 January
MMM %b 月份缩写 Jan
MM %m 2位数月份(补零) 07
M %-m 月份(不补零) 7
DDD %j 一年中的第几天? 001-366区间
DD %d 2位数日期(补零) 22
D %-d 日期(不补零) 22
dddd %A 星期几的全称 Tuesday
ddd %a 星期几的缩写 Tue(Tuesday)
d %w 星期几 0-6区间,0是星期日
E %u ISO的星期几 1-7区间,1是星期一,7是星期日

2.2. 时间部分

标记 字符串格式化 含义 示例(14:05:30)
HH %H 24小时制(补零) 14
H %-H 24小时制(不补零) 14
hh %i 12小时制(补零) 02
h %-i 12小时制(不补零) 2
mm %M 分钟(补零) 05
m %-M 分钟(不补零) 5
ss %S 秒(补零) 30
s %-S 秒(不补零) 30
SSS %f 毫秒(3位数) 123
A %p 上午/下午(大写) PM
a %P 上午/下午(小写) pm
%% SSS在一部分平台可以通过%3f来截取位数。 %%
%% A和a的字符串格式化%p与%P要依据平台和本地设置 %%

2.3. 时区部分

标记 字符串格式化 含义 示例
ZZ %z 时区偏移 +0800
Z %:z UTC 时区(+00:00 +08:00(UTC时间,ISO标准)
z %Z 时区名称 CST,EST(不推荐)
UTC UTC 显式标记 UTC 时区 UTC

2.4. 分隔符和特殊字符

字符 用途 示例
- 日期分隔符 2025-07-22
/ 替代日期分隔符 07/22/2025
: 时间分隔符 14:05:30
T 分隔日期和时间(ISO 8601) 2025-07-22T14:05:30
(空格) 替代分隔符(非标准) 2025-07-22 14:05:30

2.5. 常见格式示例

使用场景 推荐格式 示例输出
日期存储(数据库/API) YYYY-MM-DD 2025-07-22
完整日期时间 YYYY-MM-DDTHH:mm:ssZ 2025-07-22T14:05:30+08:00
可读日期 DD MMM YYYY 22 Jul 2025
带时分的时间 hh:mm A 02:05 PM
文件命名 YYYYMMDD_HHmmss 20250722_140530
日志时间戳 YYYY-MM-DD HH:mm:ss.SSS 2025-07-22 14:05:30.375
  1. ISO 8601 标准格式

    • YYYY-MM-DDTHH:mm:ssZ(UTC 时间)

    • YYYY-MM-DDTHH:mm:ss+08:00(带时区,北京时间)

  2. 人类可读格式

    • YYYY-MM-DD HH:mm:ss(无时区)

    • DD/MM/YYYY hh:mm A(如 22/07/2025 02:05 PM)西方国家常把日期和月份倒过来看,12小时格式,用AM和PM标记上午/下午。

  3. 文件名友好格式

    • YYYYMMDD_HHmmss(如 20250722_140530

    • 转换后显示为:19970823_111500

  4. 个人习惯

    • YYYY/MM/DD HH:mm:ss(显示2025/07/22 13:38:56,这个格式我常在Excel中写,我认为是可读性相当好的一种表达方式,适合所有人阅读)

    • YYYY-MM-DDTHH:mm:ss.SSSZ(万金油,受用最广,符合ISO 8601 国际标准,可以被各种编程语言与API转换识别,SQL/NoSQL,日志系统均采用这种方式存储时间)


3. 总结

对于日期格式如何表现,要考虑的情况无非以下三点:

  1. 使用场景:如果是针对普通用户阅读(例如Excel),没有时区等严格要求,那么请使用易于阅读的方式,如果用于程序设计,那么严格的计时有助于你的程序运行的更加标准。

  2. 程序支持:例如Hugo的时间支持对ISO 8601标准非常适配,但Obsidian又不用这种计时方法,因此需要严谨统一,另外文件在文件系统中一般不能用冒号作为名称,所以也需要其他符号替代。

  3. 文化差异:同考虑东西文化差异,例如西方国家喜欢先写日期再写月份,或者 22 July来表示7月22日,用AM/PM配合12小时格式来表达时间。

总之,日期格式化很繁琐,我个人建议只需要了解ISO 8601这一种和YYYY/MM/dd HH:mm:ssYYYY-mm-dd即可。