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 |
-
ISO 8601 标准格式
-
YYYY-MM-DDTHH:mm:ssZ
(UTC 时间) -
YYYY-MM-DDTHH:mm:ss+08:00
(带时区,北京时间)
-
-
人类可读格式
-
YYYY-MM-DD HH:mm:ss
(无时区) -
DD/MM/YYYY hh:mm A
(如22/07/2025 02:05 PM
)西方国家常把日期和月份倒过来看,12小时格式,用AM和PM标记上午/下午。
-
-
文件名友好格式
-
YYYYMMDD_HHmmss
(如20250722_140530
) -
转换后显示为:19970823_111500
-
-
个人习惯
-
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. 总结
对于日期格式如何表现,要考虑的情况无非以下三点:
-
使用场景:如果是针对普通用户阅读(例如Excel),没有时区等严格要求,那么请使用易于阅读的方式,如果用于程序设计,那么严格的计时有助于你的程序运行的更加标准。
-
程序支持:例如Hugo的时间支持对ISO 8601标准非常适配,但Obsidian又不用这种计时方法,因此需要严谨统一,另外文件在文件系统中一般不能用冒号作为名称,所以也需要其他符号替代。
-
文化差异:同考虑东西文化差异,例如西方国家喜欢先写日期再写月份,或者 22 July来表示7月22日,用AM/PM配合12小时格式来表达时间。
总之,日期格式化很繁琐,我个人建议只需要了解ISO 8601
这一种和YYYY/MM/dd HH:mm:ss
或YYYY-mm-dd
即可。