Instant.getEpochSecond vs Instant.toEpochMilli 背后的基本原理 [已关闭]

2022-09-03 14:37:48

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

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


答案 1

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

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

该公约实际上记录在这里:http://docs.oracle.com/javase/tutorial/datetime/overview/naming.html

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


答案 2

getter 返回对象的各个部分(如 ),而方法返回该对象的转换版本:TemporalInstantto*

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

推荐