1、UTC(时间标准)简介
UTC(世界标准时间)
UTC:协调世界时,又称 世界标准时间或世界协调时间,简称 UTC,是最主要的世界时间标准。其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间
GMT(格林尼治平时)
GMT:格林尼治平时,又称 格林尼治平均时间或格林尼治标准时间,简称 GMT,是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。
由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)。
协调世界时不与任何地区位置相关,也不代表此刻某地的时间,所以在说明某地时间时要加上时区。
即:GMT 并不等于 UTC,而是等于 UTC+0,只是格林尼治刚好在 0 时区上。
CST(北京时间)
CST:北京时间,又称 中国标准时间。在时区划分上,属东八区,比协调世界时早 8 小时,记为:UTC+8
不过这个 CST 缩写比较纠结的是它可以同时代表四个不同的时间:
- 中部标准时间(北美洲):Central Standard Time (USA) UT-6:00
- 澳州中部时间:Central Standard Time (Australia) UT+9:30
- 中国时间:China Standard Time UT+8:00
- 古巴标准时间:Cuba Standard Time UT-4:00
2、java.util.Date 与 UTC
java.util.Date
使用 UTC 时间标准
public class DateTestTwo {
public static void main(String[] args) {
Date date = new Date();
// Tue Jul 20 19:03:36 CST 2021
System.out.println(date.toString());
// 2021-7-20 19:03:36
System.out.println(date.toLocaleString());
// 20 Jul 2021 11:03:36 GMT
System.out.println(date.toGMTString());
}
}
date.toString()
:标准的 UTC 时间(CST 就代表了偏移量 +0800);
date.toLocaleString()
:本地时间,根据本地时区显示的时间格式;
date.toGMTString()
:GTM 时间,也就是格林威治这个时候的时间
将 java.util.Date
转换为 UTC 标准时间:
public class DateTestTwo {
public static void main(String[] args) {
SimpleDateFormat dateFormatUtc = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
dateFormatUtc.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = dateFormatUtc.format(new Date());
// 2021-07-20T11:27:31Z
System.out.println(utcTime);
}
}
UTC 时间格式:2021-07-20T11:27:31Z
GMT 时间格式:20 Jul 2021 11:03:36 GMT
中国的标准时间:Tue Jul 20 19:03:36 CST 2021