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

时间:2014-08-21 13:12:55

标签: java java-time

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

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

3 个答案:

答案 0 :(得分:7)

我必须猜测,但我同意你的意见:

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

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

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

答案 1 :(得分:3)

getter返回Temporal对象的部分(如Instant),而to*方法返回它的转换版本:

  • getEpochSecond()返回获取1970-01-01T00:00:00Z的Java纪元的秒数​​。
  • getNanos()返回Instant
  • 的纳秒秒
  • toEpochMilli()Instant转换为毫秒(即seconds * 1000 + nanoseconds / 1,000,000

答案 2 :(得分:0)

便利? 用于UNIX时间兼容性的EpochSeconds,用于Java日期兼容性的EpochMilli,从头到尾。

编辑: 哦,我甚至不理解这个问题,这就是为什么一个是“获取”而另一个是“to”:也许是为了提醒你第二个进行转换并可能失败。