ToolDeck

时区转换器

在全球各时区之间转换日期和时间

UTCUTC+00:00

04/16/2026, 21:55:00

America/New_YorkUTC-04:00

04/16/2026, 17:55:00

什么是时区转换?

时区转换器将某一时区的日期和时间转换为另一时区的对应时间,让您即时查看全球任意地点的等效时刻。全球划分为 24 个主要时区,每个时区定义为相对协调世界时(UTC)的固定偏移量。当 UTC 时间为 14:00 时,纽约时间为 09:00(UTC-5),东京时间为 23:00(UTC+9)。正确进行时区转换需要知道源时区和目标时区各自的 UTC 偏移量,以及两者是否正处于夏令时(DST)期间。

IANA 时区数据库(常称为 Olson 数据库或 tz 数据库)是操作系统、编程语言和网页浏览器所使用的时区定义标准来源。它为每个时区分配一个格式为"地区/城市"的规范标识符,例如 America/New_York 或 Asia/Tokyo。与 EST、PST 等固定缩写不同,IANA 标识符完整记录了每个地区 UTC 偏移量变更和 DST 转换的全部历史,是在过去或未来任意日期进行跨时区转换的唯一可靠方式。

本时区转换器使用浏览器 JavaScript 引擎通过 Intl API 内置的 IANA 时区数据。您选择源时区,输入日期和时间,工具立即计算出目标时区的等效时间,包含夏令时调整。由于完全在浏览器中运行,无需服务器往返,数据不会离开您的设备。

为什么使用这个时区转换器?

手动计算时区容易出错,尤其是涉及夏令时时。一座城市 1 月份可能是 UTC-5,而 7 月份变为 UTC-4,且各国时钟拨快拨慢的日期各不相同。美国和欧洲在不同的周日更换时间,由此产生约两周的时间窗口,在此期间纽约与伦敦之间的偏移量与全年其他时段不同。本工具使用与您的操作系统相同的 IANA 数据库,自动处理所有这些转换。

~
即时转换
选择两个时区,输入时间,立即查看结果。无需提交表单,无需刷新页面。转换随输入实时更新。
~
夏令时感知结果
转换器自动处理夏令时转换。它使用浏览器内置的 IANA 时区数据,因此结果反映您输入的任意日期(无论过去还是未来)的正确偏移量。
~
隐私优先处理
所有转换均通过 Intl API 在浏览器本地完成。日期、时间或时区选择均不会发送至任何服务器。
~
无需账户
无需注册、安装软件或授予权限即可使用本转换器。打开页面,完成时间转换,关闭即可。

时区转换器使用场景

跨团队排期
当您的团队分布在北京、柏林和新加坡时,找到一个对所有人都合适的会议时间需要跨三个或更多时区进行转换。输入您本地时区的建议时间,立即查看该时间在每位团队成员所在地是否处于工作时间内。
API 时间戳调试
API 响应中的时间戳通常以 UTC 或服务器本地时区表示。将这些时间戳转换为本地时间,以验证事件是否在预期时间发生,以及时间相关逻辑是否正确。
DevOps 故障时间线
发生故障时,日志条目可能来自不同地区的服务器。将所有时间戳转换为统一的参考时区(通常是 UTC),以构建准确的事件时间线。
QA 日期逻辑测试
向不同地区用户显示日期的应用程序需要针对特定时区输入进行测试。使用本转换器生成边界条件的测试用例,例如 DST 夏令时跳转那一小时。
数据管道协调
在某一时区调度的 ETL 任务可能需要与另一时区的数据源或下游消费者保持同步。将计划运行时间进行转换,以验证管道各阶段按正确顺序执行。
学习时区概念
学习 UTC 偏移量、国际日期变更线和夏令时规则的学习者,可以通过尝试不同时区组合来观察时间如何跨地区变化。

IANA 时区参考表

IANA 时区数据库定义了 400 余个时区标识符,并每年更新数次以反映政治变化、新的 DST 规则和历史修正。下表列出了最常用的时区及其标准 UTC 偏移量和 DST 行为。所示偏移量为标准时间偏移量;DST 列显示该地区夏令时生效时的调整后偏移量。

IANA 标识符常用名称UTC 偏移量DST
UTCCoordinated Universal Time+00:00No
America/New_YorkEastern Time (US)-05:00Yes (EDT -04:00)
America/ChicagoCentral Time (US)-06:00Yes (CDT -05:00)
America/DenverMountain Time (US)-07:00Yes (MDT -06:00)
America/Los_AngelesPacific Time (US)-08:00Yes (PDT -07:00)
Europe/LondonGreenwich Mean Time+00:00Yes (BST +01:00)
Europe/BerlinCentral European Time+01:00Yes (CEST +02:00)
Europe/MoscowMoscow Time+03:00No
Asia/DubaiGulf Standard Time+04:00No
Asia/KolkataIndia Standard Time+05:30No
Asia/ShanghaiChina Standard Time+08:00No
Asia/TokyoJapan Standard Time+09:00No
Australia/SydneyAustralian Eastern Time+10:00Yes (AEDT +11:00)
Pacific/AucklandNew Zealand Standard Time+12:00Yes (NZDT +13:00)

代码示例

主流编程语言均通过 IANA 数据库提供时区转换功能。以下示例展示如何在 JavaScript 中使用 Intl API、Python 中使用 zoneinfo 模块、Go 中使用 time 包,以及在 Shell 脚本中使用 GNU date 命令,将 UTC 时间戳转换为其他时区。

JavaScript (Intl API)
// Convert a date from one timezone to another
const date = new Date('2026-03-15T09:00:00Z')

// Format in specific timezone
const nyTime = date.toLocaleString('en-US', { timeZone: 'America/New_York' })
// → "3/15/2026, 5:00:00 AM"

const tokyoTime = date.toLocaleString('en-US', { timeZone: 'Asia/Tokyo' })
// → "3/15/2026, 6:00:00 PM"

// Get the UTC offset for a timezone programmatically
function getUtcOffset(tz: string, date = new Date()) {
  const fmt = new Intl.DateTimeFormat('en-US', {
    timeZone: tz,
    timeZoneName: 'longOffset',
  })
  const parts = fmt.formatToParts(date)
  return parts.find(p => p.type === 'timeZoneName')?.value ?? ''
}
getUtcOffset('Asia/Kolkata') // → "GMT+05:30"
Python (zoneinfo + datetime)
from datetime import datetime
from zoneinfo import ZoneInfo

# Create a timezone-aware datetime
dt = datetime(2026, 3, 15, 9, 0, tzinfo=ZoneInfo('UTC'))

# Convert to New York time
ny = dt.astimezone(ZoneInfo('America/New_York'))
print(ny)  # → 2026-03-15 05:00:00-04:00 (EDT in March)

# Convert to Tokyo time
tokyo = dt.astimezone(ZoneInfo('Asia/Tokyo'))
print(tokyo)  # → 2026-03-15 18:00:00+09:00

# Get current time in any timezone
now_berlin = datetime.now(ZoneInfo('Europe/Berlin'))
print(now_berlin.strftime('%Y-%m-%d %H:%M %Z'))  # → 2026-03-15 10:00 CET
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	utc := time.Date(2026, 3, 15, 9, 0, 0, 0, time.UTC)

	// Load timezone by IANA name
	ny, _ := time.LoadLocation("America/New_York")
	tokyo, _ := time.LoadLocation("Asia/Tokyo")

	fmt.Println(utc.In(ny))    // → 2026-03-15 05:00:00 -0400 EDT
	fmt.Println(utc.In(tokyo)) // → 2026-03-15 18:00:00 +0900 JST

	// Get the UTC offset in seconds
	_, offset := utc.In(ny).Zone()
	fmt.Printf("UTC offset: %+d hours\n", offset/3600) // → UTC offset: -4 hours
}
CLI (GNU date / TZ variable)
# Display current time in a specific timezone
TZ='Asia/Tokyo' date '+%Y-%m-%d %H:%M:%S %Z'
# → 2026-03-15 18:00:00 JST

# Convert a UTC timestamp to another timezone
TZ='America/Los_Angeles' date -d '2026-03-15T09:00:00Z' '+%Y-%m-%d %H:%M %Z'
# → 2026-03-15 02:00 PDT

# List all available IANA timezone names
timedatectl list-timezones | head -20

常见问题

UTC 和 GMT 有什么区别?
UTC(协调世界时)和 GMT(格林威治标准时间)在实际使用中表示同一时间:相对本初子午线零偏移。两者的区别是技术层面的。UTC 由原子钟定义,是计算机领域使用的全球时间标准。GMT 是与英国相关的时区名称。在代码中,应始终使用 UTC 作为参考点,而非 GMT。
夏令时如何影响时区转换?
当某地区实行 DST 时,其 UTC 偏移量每年会有一小时的变化(有时为 30 或 45 分钟)。例如,America/New_York 冬季为 UTC-5(EST),夏季为 UTC-4(EDT)。如果硬编码偏移量而不使用 IANA 时区标识符,您的转换将有半年时间是错误的。请始终使用 America/New_York 等完整 IANA 名称,而非固定偏移量。
为什么应该使用 IANA 时区名称而非 EST、PST 等缩写?
时区缩写存在歧义。CST 可能表示中部标准时间(UTC-6)、中国标准时间(UTC+8)或古巴标准时间(UTC-5)。America/Chicago 等 IANA 标识符具有全球唯一性,并完整记录了该地区偏移量变更和 DST 规则的全部历史。IANA 数据库由互联网号码分配机构维护,每年更新数次。
落在 DST 夏令时跳转空档内的时间会怎样?
当时钟拨快时,有一小时被跳过。例如,在 America/New_York,3 月第二个周日凌晨 2:00 会直接跳到 3:00。在该时区该日期,2:30 这个时刻实际上不存在。大多数编程语言会将该时间向前移至 3:00 或抛出错误,具体行为取决于所使用的库。
我能准确转换历史日期的时间吗?
可以,前提是使用 IANA 时区标识符。IANA 数据库包含数十年的历史偏移量变更记录。例如,中国在 1949 年前使用五个时区,之后统一改为单一时区(UTC+8)。数据库记录了这些历史变迁,因此将 1945 年的时间戳转换为 Asia/Shanghai 时,会使用正确的历史偏移量。
如何在数据库中存储时间以避免时区问题?
将所有时间戳以 UTC 存储。向用户显示时间时,在渲染时将 UTC 转换为用户的本地时区。这种方式可避免歧义:UTC 时间戳具有唯一含义,与服务器或用户所在位置无关。PostgreSQL 的 TIMESTAMPTZ 类型和 MySQL 的 TIMESTAMP 类型内部均以 UTC 存储值。
存在偏移量为 30 分钟或 45 分钟的时区吗?
是的。印度标准时间(Asia/Kolkata)为 UTC+5:30,尼泊尔标准时间(Asia/Kathmandu)为 UTC+5:45,查塔姆群岛(Pacific/Chatham)为 UTC+12:45。伊朗(Asia/Tehran)使用 UTC+3:30。这些非整小时偏移量意味着在编写转换逻辑时,不能假定所有时区差均为整数小时。