为什么GMT和UTC时区没有相同的规则

Azo*_*ous 7 java timezone

为什么下线打印错误?我认为它应该打印成真.

TimeZone.getTimeZone("UTC+5:30").hasSameRules(TimeZone.getTimeZone("GMT+5:30")
Run Code Online (Sandbox Code Playgroud)

Tho*_*ger 8

答案是在TimeZone#getTimeZoneJavaDoc中:

TimeZone的ID,可以是缩写,例如"PST",全名,例如"America/Los_Angeles",也可以是自定义ID,例如"GMT-8:00"

返回:指定的TimeZone,如果无法理解给定的ID,则返回 GMT区域.

并且(来自课程文档)

[...]自定义时区ID的语法是:

  CustomID:
     GMT Sign Hours : Minutes
     GMT Sign Hours Minutes
     GMT Sign Hours
Run Code Online (Sandbox Code Playgroud)

该ID "UTC+5:30"不是有效的TimeZone ID(根据方法/类的规范),并被解释为"GMT"区域,它明显不同于"GMT + 5:30"区域.

  • 你肯定是对的,@ Thilo.在这一点上认识到`TimeZone`的糟糕设计,它的现代替换`ZoneId`确实在这种情况下抛出异常.我强烈建议在旧的日期和时间类(包括`TimeZone`)上使用[`java.time`,现代Java日期和时间API](https://docs.oracle.com/javase/tutorial/datetime/). (3认同)
  • 一个奇怪的设计选择,返回GMT无效输入.异常或"null"可能更好,因为它允许调用者决定在这种情况下要做什么. (2认同)