关于时区问题
2026/6/8 13:17:38 网站建设 项目流程

时区问题

常见的时区概念

  • UTC (协调世界时)。主要的世界时间标准。
    • 本初子午线。位于英国伦敦,也叫0度经线。本初子午线所在的时区也叫零时区或中时区。
  • 北京时间 (CST):中国的标准时间是 UTC+8(比零时区早8个小时)
    • 位于本初子午线向东8个时区。
    • GMT+8也是东8时区

时区计算

所求时间 = 已知时间 ± 时区差
比如

  • 假如零时区为7号0点,则北京时间为7号8点。(UTC+8)
    • 当零时区处于半夜时,位于东边的北京时间已经是早晨时间

关于时间戳

先划一个重点,时间戳不分时区。

java.util.Date

java.util.Date 不存储时区,也不默认表示零时区。它表示的是绝对的时间点。
Date的本质: 时间戳

在日期的打印过程中,时区可能会怎样造成影响?

现在存在一个实体类Person,now是Date字段。

@Data @Builder @NoArgsConstructor @AllArgsConstructor public class Person { private Long id; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date now; } @GetMapping("/api/timezone1") public Person timeZone1(){ return Person.builder() .now(new Date()) .build(); }

spring.jackson.timezone

spring: jackson: # time-zone: 'Asia/Shanghai' # time-zone: 'GMT+8' time-zone: 'UTC'

假如我现在位于东8时区, 时间为21点46分。

  • 打印的时间格式可能为
Asia/Shanghai {"id":null,"now":"2026-06-07 21:46:37"} GMT+8 {"id":null,"now":"2026-06-07 21:46:37"} UTC {"id":null,"now":"2026-06-07 13:46:37"}

在数值上,东8区比UTC大8小时。
在实际使用中,如果配置成UTC,会导致得到的时间比结果数值小8小时

数据库(mysql)

mysql数据库时区

查询时区

SELECT @@global.time_zone, @@session.time_zone; SHOW VARIABLES LIKE 'time_zone';
时区对mysql有什么影响(待本地验证)

比如现在数据库中存在一个字段 time1,类型是时间戳。

现在我在mybatis的mapper文件中包含一个判断 time1 >= ‘2026-06-07 00:00:00’。
jdbc url中时区为utc(零时区)。
mysql会将字符串’2026-06-07 00:00:00’根据当前会话时区转为一个绝对时间(时间戳?),进行比较

所以连接的url时区会影响判断的实际时间,比如会导致相差几个小时

关于mycat(后续补充)

mycat对时区是怎么处理的?
是否可以配置成东8区?
如果配置成东8区,那连接mycat应该使用什么时区?UTC?

小补充

GMT+8和UTC+8有什么区别

简单来说,在绝大多数日常编程和配置场景下,GMT+8 和 UTC+8 没有区别

GMT+8

  • 格林尼治标准时间
  • 天文时间
  • 旧标准
  • 不均匀
  • 不需要润秒

UTC+8

  • 协调世界时
  • 原子时间
  • 现用标准
  • 极其稳定
  • 需要润秒

tag

  • 时区
  • mysql
  • spring

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询