Java Instant.getEpochSecond与Instant.toEpochMilli的基本原理

Java Instant.getEpochSecond与Instant.toEpochMilli的基本原理,java,java-time,Java,Java Time,有人能解释一下vs.命名背后的原理吗?我能想到的唯一原因是,一个瞬间的内部表示是相对于历元的秒数和相对于该秒的纳秒数,而毫秒是根据这两个值计算出来的 但是为什么要让这样一个实现细节泄露到一个新的API中呢?我不得不猜测,但我同意你的看法: getEpochSecond()表示一个getter,即它只返回存储在该实例中的值 另一方面,toEpochMilli()将计算其返回值,就像toString()不会返回存储的字符串,而是在每次调用该方法时动态生成 该公约实际上记录在这里: 此约定的原因可

有人能解释一下vs.命名背后的原理吗?我能想到的唯一原因是,一个瞬间的内部表示是相对于历元的秒数和相对于该秒的纳秒数,而毫秒是根据这两个值计算出来的


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

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

  • getEpochSecond()
    表示一个getter,即它只返回存储在该实例中的值
  • 另一方面,
    toEpochMilli()
    将计算其返回值,就像
    toString()
    不会返回存储的字符串,而是在每次调用该方法时动态生成
该公约实际上记录在这里:

此约定的原因可能与JavaBeans规范有关,即
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)
    。所以我仍然很困惑…@isnot2bad
    toEpochDay()
    会进行转换,因此
    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在回答中所述,有明确的命名准则。你的答案似乎不正确。根据javadoc
    getEpochSecond()
    获取Java纪元1970-01-01T00:00:00Z的秒数。这不是瞬间的秒部分,你说得对,“秒部分”不是很精确。我要改变这一点。