正在加载,请稍候…

日期时间转换:时区、格式与常见陷阱

在不同格式和时区之间转换日期。了解 ISO 8601、UTC 以及如何避免时区错误。

日期时间转换:时区、格式与常见陷阱

在软件中处理日期和时间

日期和时间处理在软件开发中以其复杂性著称。时区、夏令时、闰年、不同的日历系统以及不一致的格式标准,使得日期成为编程中最容易出错的领域之一。

一个好的日期/时间转换工具可以帮助开发者和数据专业人员快速在格式、时区和表示法之间进行转换,而无需记住每一个标准。

日期时间转换:时区、格式与常见陷阱 插图

Unix 时间戳

Unix 时间戳(也称为 epoch 时间或 POSIX 时间)是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数。这是 Unix/Linux 系统中的基本时间表示,并广泛用于数据库、API 和日志中。

示例:

  • 0 = 1970-01-01 00:00:00 UTC
  • 1000000000 = 2001-09-09 01:46:40 UTC
  • 1700000000 = 2023-11-14 22:13:20 UTC

毫秒时间戳在 JavaScript 中很常见(Date.now() 返回毫秒)。Python 的 time.time() 返回带小数精度的秒数。

ISO 8601 格式

ISO 8601 是日期和时间表示的国际标准:

2024-01-15T14:30:45Z           (UTC)
2024-01-15T14:30:45+05:30      (UTC+5:30, 印度)
2024-01-15T14:30:45-08:00      (UTC-8, 美国太平洋)
2024-01-15T14:30:45.123Z       (带毫秒)
2024-01-15                     (仅日期)
14:30:45                       (仅时间)

ISO 8601 是以下场景的推荐格式:

  • API 请求/响应体
  • 数据库存储
  • 日志文件
  • 系统间的数据交换

常见日期格式

不同地区和系统使用不同的日期格式:

格式 示例 地区/系统
YYYY-MM-DD 2024-01-15 ISO 8601, 数据库
MM/DD/YYYY 01/15/2024 美国
DD/MM/YYYY 15/01/2024 英国、欧洲、澳大利亚
DD.MM.YYYY 15.01.2024 德国、东欧
YYYY年MM月DD日 2024年01月15日 日本/中国 (CJK)
RFC 2822 Mon, 15 Jan 2024 14:30:45 +0000 电子邮件、HTTP 头

日期时间转换:时区、格式与常见陷阱 插图

时区与 UTC

UTC(协调世界时) 是主要的时间标准。所有其他时区都定义为相对于 UTC 的偏移量。

常见时区偏移量:

  • UTC+0: 英国(冬季)、西欧
  • UTC+1 到 UTC+2: 中欧/东欧
  • UTC+5:30: 印度 (IST)
  • UTC+8: 中国 (CST)、新加坡
  • UTC+9: 日本 (JST)
  • UTC-5: 美国东部 (EST)
  • UTC-8: 美国太平洋 (PST)

夏令时 (DST) 使时区偏移量复杂化。许多地区会按季节将时钟调整 1 小时。因此,请以 UTC 存储时间戳,仅在显示时转换为本地时间。

日期运算

常见的日期计算:

  • 持续时间:两个时间戳之间的差值(天、小时、分钟)
  • 日期加法:给一个日期加上 N 天/月/年
  • 星期几:确定某个日期是星期几
  • 季度:某个日期属于哪个财务/日历季度
  • 周数:ISO 周数

使用日期编程

日期时间转换:时区、格式与常见陷阱 插图

JavaScript

const now = new Date();
const timestamp = Date.now(); // 自纪元以来的毫秒数
const isoString = now.toISOString(); // "2024-01-15T14:30:45.123Z"

// 使用 Temporal API 的现代方法(Stage 3)
const datetime = Temporal.Now.plainDateTimeISO();

Python

from datetime import datetime, timezone
now = datetime.now(timezone.utc)
timestamp = now.timestamp()  # 自纪元以来的秒数
iso_string = now.isoformat()

使用日期时间转换工具

我们的工具:

  1. 输入任何日期格式 — Unix 时间戳、ISO 8601 或常见的本地格式
  2. 转换为所有格式 — 以多种表示形式查看同一时刻
  3. 时区转换 — 在任何两个 IANA 时区之间转换
  4. 相对时间 — 显示“3 天前”或“2 小时后”等上下文信息
  5. DST 感知 — 正确处理夏令时转换
  6. 复制任何格式 — 一键复制任何表示形式

用于调试时间戳问题、在 API 格式之间转换,以及了解给定时刻在不同时区中的显示方式。