ZonedDateTime now = ZonedDateTime.now();
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
我希望这两个ZonedDateTime
实例是相等的。
答案来自zoneid
的javadoc(强调是我的)...
ZoneId用于标识用于在Instant和LocalDateTime之间转换的规则。ID有两种不同的类型:
此方法分析生成ZoneId或ZoneOffset的ID。如果ID是'z',或者以'+'或'-'开头,则返回ZoneOffset。
参数id被指定为“UTC”
,因此它将返回一个带有偏移量的ZoneID
,偏移量也以字符串形式表示:
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));
产出:
2017-03-10T08:06:28.045Z
2017-03-10T08:06:28.045Z[UTC]
now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true
正如文档所述,如果使用“z”
或“+0”
作为输入id,的将直接返回
ZoneOffset
,并且不需要调用normalized()
:
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true
要检查它们是否存储相同的日期时间,可以使用
isequal
方法:
now.withZoneSameInstant(ZoneOffset.UTC)
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true
样品
System.out.println("equals - ZoneId.of(\"UTC\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
System.out.println("equals - ZoneId.of(\"UTC\").normalized(): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())));
System.out.println("equals - ZoneId.of(\"Z\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("Z"))));
System.out.println("equals - ZoneId.of(\"+0\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("+0"))));
System.out.println("isEqual - ZoneId.of(\"UTC\"): "+ nowZoneOffset
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))));
equals - ZoneId.of("UTC"): false
equals - ZoneId.of("UTC").normalized(): true
equals - ZoneId.of("Z"): true
equals - ZoneId.of("+0"): true
isEqual - ZoneId.of("UTC"): true
问题内容: 为什么 打印出来? 我希望两个实例都相等。 问题答案: 答案来自(强调我的)javadoc … ZoneId用于标识用于在Instant和LocalDateTime之间进行转换的规则。有两种不同的ID类型: 固定偏移量-与UTC /格林威治标准时间完全抵消的偏移量,所有本地日期时间都使用相同的偏移量 地理区域-适用于从UTC /格林威治中查找偏移量的一组特定规则的区域 大多数固定偏移量
版本: 返回一个,其ID为“z”,偏移量为0,默认区域规则。 返回一个,包含ID“utc”和。 例如,在处理时。在这里,我能发现的唯一区别是它的打印方式不同。 我们正在来回地进行代码审查讨论,所以我想这种冲突并不罕见。 它是一个常量(此外,它的偏移量值(0)甚至被缓存)。 由于缺少区域信息,它的开销少了一点。 在UTC时,不需要考虑夏时制时间或历史变化,就像在任何其他时区一样。 因此,对于我迄今为
我有几个关于时区的问题: 时间能否仅以UTC表示 UTC-6和GMT-6是否相同,这是否意味着现在是美国当地时间 比如,我的UTC时间是“02-01-2018 00:03”,这是否意味着我的美国当地时间是“01-01-2018 18:00” 我在维基百科和许多相关网站上搜索过,但没有找到相关的解释。
我从Ruby on Rails webservice以Unix时间戳格式获取当前时间(即1970年1月1日起的秒),服务器上的时区是UTC。 在Java中,我试图将本地当前时间转换为UTC时间。但每次都是提前6分钟。我想得到UTC当前时间和服务返回时间的差值。我的Java代码是- 其中服务器时间是我从网络服务获得的时间。resTime 的值显示负值,约为 6 分钟。 所以我的问题是为什么UTC时区
UTC 方法 可根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。 语法: dateObject.UTC( year, month, day, hours, minutes, seconds, ms ); 参数说明: year -- 必需。表示年份的四位数字。 month -- 必需。表示月份的整数,介于 0 ~ 11。 day -- 必需。表示日期的整数,介于 1 ~ 31
UTC代表协调世界时。 它是时间标准,并且在世界各地普遍使用。 所有时区都与UTC相比计算为偏移量。 例如,丹麦哥本哈根的时间是UTC + 1表示UTC时间加一小时。 它独立于Day light节省,应该用于在数据库中存储日期和时间。 转换时区 以下示例将展示各种时区的转换。 我们将以毫秒为单位打印一天中的小时和时间。 首先会有所不同,第二个将保持不变。 IOTester.java import