Instant.getEpochSecond与Instant.toEpochMilli背后的基本原理

oox*_*oxi 10 java java-time

有人可以解释一下Instant.getEpochSecondInstant.toEpochMilli命名背后的理由吗?我能想到的唯一原因是瞬间的内部表示为相对于纪元的秒数​​和相对于该秒的纳秒时间,而毫秒数是根据这两个值计算的.

但是为什么要让这样的实现细节泄漏到新的API中呢?

Tho*_*mas 7

我不得不猜,但我同意你的看法:

  • getEpochSecond() 表示仅仅是getter,即它只返回存储在该实例中的值
  • toEpochMilli()另一方面会计算它的返回值,就像toString()不会返回存储的字符串一样,但每次调用方法时都会在运行中构建

这个惯例实际上记录在这里:http://docs.oracle.com/javase/tutorial/datetime/overview/naming.html

此约定的原因可能与JavaBeans规范有关,epochSecond即将是(只读)属性,InstantepochMilli不是表示但不是属性.

  • 有可能.更有趣的是`LocalDateTime.toLocalDate()`.在我看来,本地日期是`LocalDateTime`的一部分,因此`getLocalDate()`更适合,因为它不是转换.特别是,正如javadoc所说:_获取此日期时间的`LocalDate`部分._ ...;) (2认同)
  • @ isnot2bad是真的,`toLocalDate()`是一个纯粹的getter.好吧,我想我们不能指望Oracle人员是完美的;) (2认同)
  • 请注意,虽然`toLocalDate()`是作为一个简单的实例变量返回实现的,但是规范中应该没有任何内容需要这样做.即.规范允许实现直接保存原始年+月+日+小时+分+秒+纳米(而不是LocalDate + LocalTime)的`LocalDateTime`,并在调用方法时创建`LocalDate`实例. (2认同)