【问题标题】:Why does JodaTime's DateTime class have a minusMillis() method?为什么 JodaTime 的 DateTime 类有一个 minusMillis() 方法?
【发布时间】:2012-10-11 18:31:23
【问题描述】:

真的很想知道,很棒的 JodaTime 库中的 DateTime 类有一个

minus(long millis)

方法,它返回一个新的 DateTime 对象减去指定的毫秒数,那么我为什么需要

minusMillis(int millis)

方法,它的作用相同,但毫秒数为整数? Integer.MAX_VALUE 以毫秒为单位只​​有 24 天,这没什么用,大概它只是将 int 转换为 long 并将其泵入其他方法?

JodaTime 库写得非常好,我想可能是我失踪的原因。

http://joda-time.sourceforge.net/api-release/org/joda/time/DateTime.html#minusMillis(int)

编辑:澄清一下,我想知道为什么我应该使用 minusMillis(int) 方法 - 我了解更强大的 minus(long) 方法的用途。

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    我怀疑这是因为在 1.0 版中只有 minus(long duration) 方法,但在 1.1 版中添加了 minusXxxx(int units) 导致 minusMillis(int) 被添加以保持一致性,minus(long) 未被删除以实现向后兼容性。

    顺便说一句:有一个plus(long duration) 和一个plusMillis(int millis),我想是出于同样的原因。

    【讨论】:

    • 当然减(长)不是遗留,它是一个更强大的方法 - 你可以有效地减去任意长度的时间,而不仅仅是〜24天。我认为这可能只是为了保持一致性,但正如我所提到的,对于一个经过深思熟虑的库,我想知道是否有更具体的原因。
    • 我同意它值得保留,所以如果你稍后要添加 minuxXxxx(int) 方法,你最终会得到两个做非常相似的事情的方法。如果现在重新设计库,您可以将它们组合成一种方法。
    • 好的,所以我想这只是为了保持一致性。出于这个原因,我会接受这个答案。谢谢!
    【解决方案2】:

    方法 minusMillis(int millis),可以减去最大 Integer.Max 毫秒,转换为天数时为 (2^31 -1) 大约为 24.8 天

    因此,如果您想减去两个日期对象,例如 date1 -(天数),其中天数 > 29,那么您无法使用 minusMillis(int millis) 来执行此操作,因此该方法

    DateTime minus(long duration)

    提供。

    【讨论】:

    • 是的,我想知道为什么当 minus() 更好(而且更短!)时你会使用 minusMillis()
    【解决方案3】:

    然后你查看DateTime的来源你会发现这两个方法最终都会调用DateTime.withMillis(long newMillis)DateTime.minus(long duration) 调用 DateTime.withDurationAdded(long durationToAdd, int scalar),它基本上只是将毫秒转换为 DateTime.withMillis(long newMillis) 所需的格式。

    所以我假设minus(long duration) 的存在只是出于兼容性原因。

    【讨论】:

    • 有趣的是他们最终都做了同样的事情,但这让我更想知道他们为什么要麻烦添加 minusMillis() 方法!
    • @Conan:这可能只是一个设计决定。拥有minus{Hours,Days,Minutes,...} 但没有minusMillis 可能会引起不适。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2014-09-25
    • 1970-01-01
    • 2019-05-08
    相关资源
    最近更新 更多