在阿里巴巴的Java编程规范中,有一条推荐是:
13. 【推荐】前后端的时间格式统一为”yyyy-MM-dd HH:mm:ss”,统一为GMT。
( https://ufqi.com/news/ulongpage.1524.html?tit=Java開發手冊-阿里巴巴-嵩山版-11:前后端规约 )
其中的重点是“统一为GMT”, 可以设想作为跨国集团企业,由于有多个时区的在线作业系统,如果不统一时区,各个需要通信的服务器之间会乱成啥。两个都是八点服务器可能一个是早上八点,一个晚上八点,还可能是前一天的八点,或者后一天的八点。
服务器之间要统一时间和时区,客户端和服务器之间也需要统一时间/时区,有些对时间敏感的通信需要验证时间,如果只报时间是八点是远远不够的。这可能是阿里巴巴在Java编程操作手册中推荐这条规约的原因之一吧。
所以跨国集团企业的服务器时间必须统一,为啥“统一为GMT”呢?
GMT 是时区timezone序列中唯一不受夏令时/冬令时/日间灯节约时间调整的时区。与之对应的是 UTC,但UTC不是时区timezone的概念。
- GMT(Greenwich Mean Time) is a time zone officially used in some European and African countries. The time can be displayed using both the 24-hour format (0 – 24) or the 12-hour format (1 – 12 am/pm).
- UTC(Coordinated Universal Time) is not a time zone, but a time standard that is the basis for civil time and time zones worldwide. This means that no country or territory officially uses UTC as a local time.
不独在Java编程规范中需要注意时间和时区的问题,在其他编程语言中,也需要注意。比如PHP中,
# standard timezone with winter or summer time
date_default_timezone_set(“Europe/London”);
# standard timezone without winter or summer time
date_default_timezone_set(“GMT”);
# non-standard timezone, but compatible
date_default_timezone_set(“UTC”);
这三个设置,在冬令时,返回的时间是一样的,但如果在夏令时,第一个返回的时间就与后面两个不一样了。
对应地,在Java编程中,除了在服务器层面设置timezone,也可以在代码层面设置运行时timezone的指定:
System.setProperty(“user.timezone”, “Europe/London”);
System.setProperty(“user.timezone”, “GMT+0000”);
Java JDK的相关说明: ( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/TimeZone.html )The syntax of a custom time zone ID is:
CustomID:
GMT Sign Hours : Minutes
GMT Sign Hours Minutes
GMT Sign Hours
Sign: one of
+ -
Hours:
Digit
Digit Digit
Minutes:
Digit Digit
Digit: one of
0 1 2 3 4 5 6 7 8 9
Hours must be between 0 to 23 and Minutes must be between 00 to 59. For example, “GMT+10” and “GMT+0010” mean ten hours and ten minutes ahead of GMT, respectively.
当然,较好的设置timezone的方式是在服务器层面,在编程语言的配置文件中,比如 PHP中的php.inc 文件,或者 Java的Jvm参数方式:java -Duser.timezone=“Asia/Chongqing” 。

在 gMIS吉密斯( https://ufqi.com/dev/gmis/ )的头部运行时设置中,已经启用了将当前运行时环境的时区timezone设置为 GMT;
在 GWA2吉娃兔( https://ufqi.com/dev/gwa2/ )的头部运行时设置中,已经启用了将当前运行时环境的timezone时区设置为GMT。
美国人纳斯达克总是晚上开盘偷摸炒股?











Pingback引用通告: gmt, utc, timezone, daylight saving,时区和夏令时 | -wordpress-wadelau