日期格式化

自写 pattern 引擎一次给出 ISO、RFC、Java/PHP/Go/MySQL 各家写法。

输入一个日期,一次拿到各家写法:墙上时间、中文写法、自带 Z 或 ±HH:MM 的 ISO 串、纯数字时间戳都认,不带偏移的写法按你在「解释时区」里选的 IANA 时区理解,默认是本机时区,而不是偷偷按 UTC 或按浏览器区域设置渲染。输出是一张 33 行的对照表,分 ISO 8601、RFC 与 HTTP、数据库、语言写法、命令行与时间戳、中文与相对时间六组,每组各自折成一个可展开的区块、默认只展开 ISO 8601 那一组,第三列直接给出该语言的格式串以便抄用。下面的 pattern 试验台用的是本页自写的引擎,不依赖任何库,记号清单与字面量写法见「用法」。

引擎刻意做得比一般工具严格:不属于记号的字母和记号长度不对都立刻报错并给出位置,而不是悄悄当字面量输出,否则错误会一路带进日志格式和数据库字段里;未闭合的单引号同样报错。它只做格式化,不做反向解析:你写的 pattern 不会被拿去解析输入串,输入只认「用法」里列举的那几种固定写法。它也不支持 12 小时制与上午下午、ISO 周编号和周历年、闰秒、儒略历(按 ECMAScript 的前推格里高利历处理)、非中文以外的界面文案。所有换算在浏览器内完成,不上传。

日期格式化怎么用

  • 先选解释时区:表格与试验台的所有字段都取自「解释时区」,同一瞬间换成 America/New_York 后每一行都跟着变;带 Z 或 ±HH:MM 的输入本身已确定瞬间,时区只影响显示。非法时区名会报错并说明只接受 IANA 全名。
  • 抄对照表的第三列:先点开对应分组(默认只展开 ISO 8601,其余五组收在标题里,展开标题上写着各组行数);第三列是该语言/工具的格式串写法,可直接粘进代码;它只是给人看的参考文本,本页不用它解析或格式化,真实输出永远出自本页引擎。表里把带偏移与 Z 结尾、含毫秒与不含毫秒、W3C-DTF 与 datetime-local 控件那种不带偏移的取值区分开列,例如 MySQL 的 2026-03-08 15:30:45、PostgreSQL 整点省略冒号的 +08、Java 的 yyyy-MM-dd HH:mm:ss、PHP 的 date('Y-m-d H:i:s')、Python 的 %Y-%m-%d %H:%M:%S、Go 的 2006-01-02 15:04:05,还有相对现在的「3 天前」。
  • 用试验台定日志格式:在 pattern 框里试到满意为止,输入正下方就是大字的格式化结果,旁边 meta 给出字符数;记号表默认收起,点开可看每个记号在本次日期上的实际输出。常用写法有快捷标签,例如 yyyy-MM-dd'T'HH:mm:sszzz 与 EEE, dd MMM yyyy HH:mm:ss。pattern 与「解释时区」记在本机 localStorage 的 kc-df 里,刷新后回到上一次的写法;无痕模式或存储被禁用时读写静默失败,只是这次不再记忆。
  • 认哪些输入:可接受的输入包括 2026-03-08 15:30:45、只写日期的 2026-03-08、自带 Z 或 ±HH:MM 的 ISO 串、2026年3月8日 15时30分,以及纯数字时间戳(不超过 10 位当秒、11 位及以上当毫秒)。
  • 试验台认哪些记号:支持的记号是 yyyy yy MM M dd d HH H mm ss SSS EEE EEEE zzz,重复的同类字母算一个记号,位数决定补零与否(HH 是 00、H 是 0,SSS 恒为三位毫秒);EEE/EEEE 输出英文星期,zzz 输出时区框给出的标记,比如纽约夏天是 EDT、中国大陆是 GMT+8。大写 M 是月、小写 m 是分,这也是最经典的抄错处。

常见问题

Go 为什么用 2006 当格式串?

Go 的 time 包不用占位字母,而是拿一个真实瞬间当模板:参考时间是 Mon Jan 2 15:04:05 2006 MST(Unix 时间戳 1136239445)。这串值按 1 月、2 日、3 点(15 即下午 3 点的 24 小时制)、4 分、5 秒、6(年取后两位 06)、7(星期,Monday 排在第 1)排布,好记又好认,所以布局里写 2006 就是年、写 01 就是月、写 15 就是 24 小时制的时。本页对照表 Go 那两行的第三列给的就是 2006-01-02 15:04:05 与 2006-01-02 15:04:05 MST。

为什么我写 hh 会报错,别的工具里它能用?

本站引擎只实现列举出的记号,12 小时制(h)和 AM/PM(a)不在其中,所以宁可当场报错也不当字面量输出。若静默通过,日志里就会出现「h」这种字符,或把 13:05 输出成看起来正常的 01:05,排查成本远高于一次报错。要 12 小时制请自行用 HH 加条件处理,或改用语言库。不属于记号的字母(12 小时制的 hh、一年里第几天的 D、星期序号 w、AM/PM 的 a)和记号长度不对(yyyyy、SS、zzzz)都立刻报错并给出位置。

时间戳到底按秒还是按毫秒算?

按位数:不超过 10 位是秒,11 位及以上是毫秒。分界值 9999999999 按秒是 1976-06-19,而 10000000000 若按秒会是 2286 年——人写的时间戳不可能到那个量级,所以长度就是单位线索。低于 7 位的纯数字(比如只写一个 2026)不会被当成时间戳,会直接提示改用日期写法。本页只到毫秒,纳秒时间戳(19 位)请先自行除以 1000。

固定文字怎么混进 pattern?

固定文字要用单引号包住——ISO 的分隔符必须写成 'T','yyyy' 会原样吐出四个字母,两个连续单引号产出一个字面单引号。

能写 Java 那种大写 YYYY 吗?

Java 里写成大写 YYYY 会得到周历年,跨年那一周差一年,本页不会替你这样算:引擎不支持 ISO 周编号和周历年。

对应功能编号 #48无需安装,手机端同样可用按 Ctrl + K 换工具