有人可以解释Instant.getEpochSecond与Instant.toEpochMilli命名背后的理由吗?我能想到的唯一原因是瞬间的内部表示为相对于纪元的秒数和相对于第二秒的纳秒时间,而毫秒是根据这两个值计算的。
但是为什么要让这样的实现细节泄漏到新的API中呢?
答案 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”:也许是为了提醒你第二个进行转换并可能失败。