【问题标题】:Why must end be greater than start for a JodaTime BaseInterval?为什么 JodaTime BaseInterval 的结束必须大于开始?
【发布时间】:2015-07-08 23:12:19
【问题描述】:

我可以理解为什么在大多数情况下强制结束时间大于开始时间是合适的,但是 JodaTime 库是否有特定原因强制 BaseInterval 类型的约束?

这真的妨碍了我设计一台也可以时光倒流的时光机。

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    因为在你开始之前不可能完成它。

    JodaTime 测量系统中的时间正在递增。这意味着对所有时间进行排序,以使较小的时间在较大的时间“之前”。因此,可以保证某事物的“开始”时间小于或等于其“结束”时间。

    出于设计原因,它大大简化了数学运算。为了比较两个时间是否重叠,可以基于开始时间在结束时间之前的假设来简化比较。如果没有这样的假设,人们将不得不检测时间间隔的“方向”,并可能以相同的方式检测重叠的“反向”。

    由于时间间隔可以以这样一种方式组合,即获得两个间隔的边界间隔,包含不同方向的间隔打破了数学假设。例如,包含前向和后向时间方向的区间边界的方向是什么?我想一个人可以想出一个“混合”方向,但这进一步使数学与区间方向的三个状态变得复杂。

    同样,当它的组件处于混合方向时拒绝计算边界间隔会使所有普通用例的界面复杂化。一个干净、简洁的基于区间数学的集合必须以某种方式干净地结合方向。

    【讨论】:

    • 感谢您的编辑,它澄清了很多。
    • @Greg 谢谢你的好话。陈述很简单,但含义往往不是。我处理过(并编写过)过去处理间隔的时间系统。 Joda 决定让时间单向是为什么间隔作为一组瞬间系统可以直观地工作。你需要双向时间让我很感兴趣。为了使间隔作为一组正常工作,需要双向瞬间。我可能不得不尝试在“幸运的是牛奶”中模拟牛奶的存在
    • @Greg 从纯粹的叙事场景来看,大多数时间旅行都被建模为向后“跳跃”到一个新的点,然后你继续前进。在这样的跳跃中,它们往往是瞬时的。现实中,如果一个东西向后移动,而在一个参照系里面还有一个向前的时间箭头,那它不是马上就和自己相撞了吗?可能需要考虑这一点并为您的时间机器设计一些安全机制:)
    • 说真的,“跳跃”是我正在努力解决的问题。我希望间隔被建模为时间向量(以幅度和方向为起点)。在这种情况下,可以将跳跃建模为一系列一个或多个间隔。对我来说,旅程会影响到达哪个目的地。换句话说,一个区间可能是另一个区间的函数,或者每个区间都可能受到另一个过程的影响。为了跳到过去,我会将旅行建模为具有负持续时间的间隔的集合。跳跃是根据持续时间来计算的,实际目的地取决于起点。
    • @Greg 所以说真的,一个向量有一个量级,但你在 JodaTime 中所拥有的是这个量级是一个方向上“时间距离”的“正常”。这意味着表示电影放映时间的向量比另一个表示不同电影放映时间的向量长四倍的向量模拟了播放时间比另一部电影长四倍的电影。它不会在没有位移的情况下及时“保持”位移。如果您认为跳跃是“瞬时的”(不花时间),那么也许您可以使用前向时间向量列表对其进行建模。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2018-12-20
    相关资源
    最近更新 更多