Appearance
时区
导航目录
什么是时区
- 时区是指地球上的某个区域使用相同标准时间的范围。由于地球自转的关系,不同地区的日出和日落时间不同,因此人们将地球划分为不同的时区,每个时区都基于当地的太阳时间来确定时间。
时区分布
- 全球一共有大约 37 种时区。虽然理论上地球被划分为 24 个标准时区(每个时区相差 1 小时),但由于某些国家和地区采用了半小时或 15 分钟的偏移时间,再加上一些极端的时区(如 UTC+14 和 UTC-12),使得实际的时区数量要多于 24 个。
UTC-12 到 UTC-1
- UTC-12:贝克岛、豪兰岛
- UTC-11:美属萨摩亚、纽埃岛
- UTC-10:夏威夷-阿留申标准时间(包括夏威夷、塔希提岛)
- UTC-9:30:法属波利尼西亚(马贵斯群岛)
- UTC-9:阿拉斯加标准时间(包括美属萨摩亚、法属波利尼西亚的甘比尔群岛)
- UTC-8:太平洋标准时间(美国西海岸、加拿大西部)
- UTC-7:山地标准时间(美国中部、墨西哥部分地区)
- UTC-6:中部标准时间(美国、墨西哥、洪都拉斯)
- UTC-5:东部标准时间(美国东部、加拿大东部、哥伦比亚、秘鲁)
- UTC-4:大西洋标准时间(加勒比地区、委内瑞拉、玻利维亚)
- UTC-3:30:纽芬兰标准时间(加拿大纽芬兰和拉布拉多)
- UTC-3:阿根廷、乌拉圭、巴西部分地区
- UTC-2:南乔治亚岛、南桑威奇群岛
- UTC-1:亚速尔群岛、佛得角
UTC+0 到 UTC+14
- UTC+0(GMT):英国、葡萄牙、冰岛
- UTC+1:中欧时间(法国、德国、意大利、西班牙)、西非时间
- UTC+2:东欧时间(芬兰、希腊、以色列、南非)、中东时间(例如,约旦)
- UTC+3:莫斯科时间、沙特阿拉伯、东非时间(肯尼亚、埃塞俄比亚)
- UTC+3:30:伊朗标准时间
- UTC+4:阿联酋、阿塞拜疆、毛里求斯
- UTC+4:30:阿富汗标准时间
- UTC+5:巴基斯坦、土库曼斯坦、乌兹别克斯坦
- UTC+5:30:印度标准时间、斯里兰卡
- UTC+5:45:尼泊尔标准时间
- UTC+6:孟加拉国、哈萨克斯坦、吉尔吉斯斯坦
- UTC+6:30:缅甸、科科斯群岛
- UTC+7:泰国、越南、印度尼西亚部分地区
- UTC+8:中国标准时间、马来西亚、新加坡、澳大利亚西部时间
- UTC+8:45:澳大利亚尤克拉标准时间
- UTC+9:日本标准时间、韩国标准时间
- UTC+9:30:澳大利亚中部标准时间
- UTC+10:澳大利亚东部标准时间、巴布亚新几内亚
- UTC+10:30:澳大利亚部分地区(如劳雷尔群岛)
- UTC+11:所罗门群岛、新喀里多尼亚
- UTC+12:斐济、基里巴斯
- UTC+12:45:新西兰查塔姆群岛
- UTC+13:汤加、萨摩亚
- UTC+14:基里巴斯部分岛屿
什么是零时区
- 零时区(也称为 UTC 0 或 GMT 0)是指协调世界时(UTC)的基准时区。它位于格林尼治天文台的经度 0 度线,即格林尼治标准时间(GMT)的起点。
零时区的用途
- 零时区作为全球时间系统的基准,所有其他时区的时间都是相对于这个基准来计算的。它帮助协调世界各地的时间,使得国际活动可以在一致的时间框架下进行。
JavaScript 日期时区
功能说明:JavaScript 中的日期对象会根据本地时区生成时间,但也提供了方法来处理不同时区的时间。
- 在 JavaScript 中,使用
new Date()创建的日期对象会根据你所在的本地时区生成当前日期和时间。默认情况下,Date 对象会使用操作系统的时区设置。
js
const date = new Date();
// 浏览器或 JavaScript 环境会自动转成本地的时区
console.log(date.toString()); // 输出本地时区的时间字符串,例如:"Sat Sep 14 2024 10:16:12 GMT+0800 (中国标准时间)"
// 假设你所在时区为 UTC+8(中国标准时间),转换成 UTC 零时,需要减去8个小时的时差,所以 10:16:12 => 02:16:12
console.log(date.toISOString()); // 输出 UTC 时间的字符串,例如:"2024-09-14T02:16:12.232Z"
// 假设你所在时区为 UTC-2(南乔治亚岛),转换成 UTC 零时,需要加2个小时的时差,所以 10:16:12 => 12:16:12
console.log(date.toISOString()); // 输出 UTC 时间的字符串,例如:"2024-09-14T12:16:12.232Z"时区转换示例
功能说明:展示如何在 JavaScript 中进行时区转换和处理。
js
// 1. 创建一个指定时区的日期对象
const date = new Date("2024-09-14T10:16:12+08:00"); // 中国标准时间
// 2. 转换为 UTC 时间
const utcTime = date.toISOString();
console.log("UTC 时间:", utcTime); // 输出: 2024-09-14T02:16:12.000Z
// 3. 获取本地时间的各个部分
const year = date.getFullYear();
const month = date.getMonth() + 1; // 月份从 0 开始
const day = date.getDate();
const hours = date.getHours();
const minutes = date.getMinutes();
const seconds = date.getSeconds();
console.log(`${year}-${month}-${day} ${hours}:${minutes}:${seconds}`); // 本地时间
// 4. 获取 UTC 时间的各个部分
const utcYear = date.getUTCFullYear();
const utcMonth = date.getUTCMonth() + 1;
const utcDay = date.getUTCDate();
const utcHours = date.getUTCHours();
const utcMinutes = date.getUTCMinutes();
const utcSeconds = date.getUTCSeconds();
console.log(
`UTC: ${utcYear}-${utcMonth}-${utcDay} ${utcHours}:${utcMinutes}:${utcSeconds}`
); // UTC 时间处理时区的最佳实践
- 存储时间时使用 UTC:在数据库中存储时间时,建议使用 UTC 时间,避免时区混淆
- 显示时间时转换为本地时区:在前端显示时间时,根据用户的本地时区进行转换
- 使用专门的库:对于复杂的时区处理,建议使用 Moment.js 或 date-fns-tz 等库
- 注意夏令时:某些地区会实行夏令时,需要考虑这一因素
时区常见问题
1. 为什么会有半小时和 15 分钟的时区?
- 一些国家和地区为了更好地适应当地的地理情况,采用了非整小时的时区偏移。例如,印度使用 UTC+5:30,尼泊尔使用 UTC+5:45。
2. 什么是夏令时?
- 夏令时(Daylight Saving Time,DST)是指在夏季将时钟调快一小时,以充分利用日照时间,减少人工照明的使用。并非所有国家都实行夏令时。
3. 如何在 JavaScript 中检测夏令时?
js
function isDaylightSavingTime(date) {
const jan = new Date(date.getFullYear(), 0, 1);
const jul = new Date(date.getFullYear(), 6, 1);
return (
date.getTimezoneOffset() <
Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset())
);
}
const now = new Date();
console.log("是否处于夏令时:", isDaylightSavingTime(now));