日期/时间转换器
一个全面的日期和时间解析器,处理 Unix 时间戳、ISO 8601 日期、RFC 2822 格式、美国/欧洲日期样式、长日期和相对表达式。在格式之间转换,显示相对时间,并提供当前时间戳参考。
规范
常见用例
- 调试包含时间戳或日期的 API 响应
- 将日志文件时间戳转换为可读日期
- 解析不同地区格式的日期
- 计算事件之间的时间差
- 为 API 请求生成时间戳
- 验证令牌过期时间(JWT exp 声明)
- 为国际团队在日期格式之间转换
功能
- 自动检测格式:Unix 时间戳、ISO 8601、RFC 2822、美国/欧洲日期等
- 解析秒、毫秒、微秒或纳秒精度的 Unix 时间戳
- 处理带或不带时间的 ISO 8601 日期(2024-01-25T12:00:00Z)
- 解析美国格式(01/25/2024)、欧洲格式(25.01.2024)和长日期(January 25, 2024)
- 识别相对表达式:now、today、yesterday、tomorrow
- 显示相对时间("2 小时前"、"3 天后")
- 过去/未来/今天状态标签
- 显示星期几、周数、季度和年中第几天
- 日历指标网格(年中第几周、季度、年中第几天)
- 附加信息区域(时区、月份天数、闰年)
- 转换为多种输出格式并提供复制按钮
- Unix 微秒和纳秒输出
- 带刷新按钮的当前时间参考卡片
示例
提示
- JavaScript Date.now() 返回毫秒;大多数 Unix 工具使用秒。
- ISO 8601 格式(2024-01-25T12:00:00Z)是最具可移植性和最明确的格式。
- 使用 UTC 时间戳进行存储;仅在显示时转换为本地时间。
- 当日期不明确时(例如 01/02/2024),工具使用上下文线索来确定格式。
- "2038 年问题"影响使用有符号整数存储 Unix 秒数的 32 位系统。
理解 日期/时间转换器
Unix 时间戳将特定时刻表示为自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数。这种简单的整数表示是计算中的通用时间格式,被数据库、API、文件系统、日志文件和操作系统接口使用。该格式是明确的——与人类可读的日期不同,Unix 时间戳始终指向确切的一个时刻,与时区无关。
两种精度级别很常见。秒精度时间戳(10 位数字,如 1738800000)是传统的 Unix 格式,被大多数 Unix API、数据库和 C 语言的 time() 函数使用。毫秒精度时间戳(13 位数字,如 1738800000000)被 JavaScript(Date.now())、Java(System.currentTimeMillis())和许多 Web API 使用。此工具自动检测精度并正确处理两种格式。
ISO 8601 是标准的人类可读日期时间格式:2025-02-05T12:00:00Z。T 分隔日期和时间,Z 表示 UTC(祖鲁时间)。时区偏移使用 +HH:MM 或 -HH:MM 表示法。ISO 8601 是 JSON Schema 所要求的,在 REST API 中广泛使用,并被推荐用于任何日期时间字符串交换。RFC 2822 格式(用于电子邮件头)是另一种常见的文本表示。
时区处理是日期时间错误最常见的来源。开发者经常将 UTC 时间戳与本地时间混淆、错误地应用时区转换,或在没有时区信息的情况下存储本地时间。最佳实践是始终以 UTC 存储和传输时间,仅在显示时转换为本地时间。
将 Unix 时间戳存储为 32 位有符号整数的系统将在 2038 年 1 月 19 日 03:14:07 UTC 溢出,变为代表 1901 年 12 月的负数。这类似于千年虫问题,但对计算基础设施的影响更为广泛。解决方案是使用 64 位整数,将范围扩展到数十亿年。大多数现代系统已经使用 64 位时间,但嵌入式系统和遗留代码可能仍然存在隐患。
在选择以时间戳还是格式化字符串存储日期时,需考虑使用场景。时间戳(整数)适合计算密集型场景,如排序、计算持续时间和比较日期——它们紧凑、明确且与时区无关。ISO 8601 字符串在人类可读性重要、需要保留时区上下文或数据库具有原生日期时间类型时更为可取。例如,PostgreSQL 的 timestamptz 内部以 UTC 存储并在显示时转换。
日期偏差一天几乎总是由时区混淆引起的。2 月 5 日 23:00 UTC 的 UTC 时间戳在 UTC+2 时区已经是 2 月 6 日。在 JavaScript 中,Date() 对纯日期字符串使用本地时间,但对带时区标识符的日期时间字符串使用 UTC。明确指定时区并始终使用 UTC 进行存储和传输可以防止这些微妙的错误。