Java Instant.getEpochSecond与Instant.toEpochMilli的基本原理
有人能解释一下vs.命名背后的原理吗?我能想到的唯一原因是,一个瞬间的内部表示是相对于历元的秒数和相对于该秒的纳秒数,而毫秒是根据这两个值计算出来的Java Instant.getEpochSecond与Instant.toEpochMilli的基本原理,java,java-time,Java,Java Time,有人能解释一下vs.命名背后的原理吗?我能想到的唯一原因是,一个瞬间的内部表示是相对于历元的秒数和相对于该秒的纳秒数,而毫秒是根据这两个值计算出来的 但是为什么要让这样一个实现细节泄露到一个新的API中呢?我不得不猜测,但我同意你的看法: getEpochSecond()表示一个getter,即它只返回存储在该实例中的值 另一方面,toEpochMilli()将计算其返回值,就像toString()不会返回存储的字符串,而是在每次调用该方法时动态生成 该公约实际上记录在这里: 此约定的原因可
但是为什么要让这样一个实现细节泄露到一个新的API中呢?我不得不猜测,但我同意你的看法:
表示一个getter,即它只返回存储在该实例中的值getEpochSecond()
- 另一方面,
将计算其返回值,就像toEpochMilli()
不会返回存储的字符串,而是在每次调用该方法时动态生成toString()
epochSecond
将是Instant
的(只读)属性,而epochMilli
是不同的表示形式,但不是属性。?
EpochSeconds用于UNIX时间兼容性,Epochmili用于java日期兼容性,这是我的想法
编辑:
哦,我甚至不理解这个问题,这就是为什么一个是“get”,另一个是“to”:也许是为了提醒你,第二个进行了转换,可能会失败。getter返回一个
临时对象的部分(比如Instant
),而to*
方法返回它的转换版本:
getEpochSecond()
返回从1970-01-01T00:00:00Z的Java纪元获取秒数
getNanos()
返回瞬间的第二部分的纳秒数
toEpochMilli()
返回转换为毫秒的瞬间
(即秒*1000+纳秒/1000000
)+1用于链接。有趣的是,
LocalDate
有一个方法toEpochDay
,但也支持getLong(ChronoField.EPOCH\u DAY)
。所以我仍然很困惑…@isnot2badtoEpochDay()
会进行转换,因此toX()
命名是正确的<另一方面,code>getLong()在大多数情况下都会返回LocalDate的部分状态,除了getLong(EPOCH_DAY)
这实际上会导致行returntoepochday()代码>。所以我想这两种约定都不完全适合这里,但是getX()
约定在大多数情况下都适合,所以我想这是一种折衷。更有趣的是LocalDateTime.toLocalDate()
。在我看来,本地日期是LocalDateTime
的一部分,因此getLocalDate()
更适合,因为它不是转换。特别是,正如javadoc所说:获取此日期时间的LocalDate
部分….;)@是的,toLocalDate()
是一个纯粹的getter。嗯,我想我们不能指望甲骨文的人是完美的;)需要注意的是,虽然toLocalDate()
现在是作为一个简单的实例变量返回来实现的,但是规范中不应该有这样的要求。也就是说,规范允许实现LocalDateTime
,它直接保存原语year+month+day+hour+min+sec+nano(而不是LocalDate+LocalTime),并在调用该方法时创建一个LocalDate
实例。这个问题不是基于意见的,因为正如Thomas在回答中所述,有明确的命名准则。你的答案似乎不正确。根据javadocgetEpochSecond()
获取Java纪元1970-01-01T00:00:00Z的秒数。这不是瞬间的秒部分,你说得对,“秒部分”不是很精确。我要改变这一点。