如何最好地表示*非常*宽的时间范围?

How best to represent *very* wide time ranges?

提问人:beyarkay 提问时间:9/8/2023 最后编辑:beyarkay 更新时间:9/9/2023 访问量:52

问:

我想写一个程序来存储整个历史中的各种事件,从大爆炸到宇宙的热寂。

有没有一种标准的方式来表示这个时间范围?大多数日期时间库都在与未来/过去 5000 年以上的日期作斗争,因此我认为任何现有库都无法工作,除非作为“足够接近”日期时间的默认值。

如果它不准确,我很高兴,如果我能避免它,我不会考虑不同的日历。特别是对于数百万年前发生的事件,我不需要毫秒级的精度。

我将用 Rust 编写这篇文章,但从一种语言到另一种语言,实现不应该有太大的变化。

我的第一个想法是用我自己的结构包装一个日期时间库,该结构为更大的时间范围定义了一些 64 位整数:

struct BigTime {
    datetime: <library's datetime object>,
    millions_of_years: i64,
    trillions_of_years: i64,
}

有没有一种“更整洁”的方法可以做到这一点?

日期时间 rust biginteger

评论

2赞 user2722968 9/8/2023
至于要求图书馆推荐,这个问题超出了 SO 的范围,所以我建议删除问题的那部分。作为一般的解决方案,我强烈建议放弃所有希望:日历,尤其是那些与“深度时间”有关的日历,非常复杂,几乎没有实际用途。自大爆炸以来,最简单的方法是制作一个 128 位秒的表示(“stardate”),并将标准的日期时间表示转换为它,但永远不会回来。
1赞 user2722968 9/8/2023
作为额外的旁注:如果你真的关心非常深的时间,最好完全取消线性时间,并使用像罗伯逊沃克比例因子这样的宇宙学表示。否则,非常接近大爆炸的 1 个单位与公元 3231 年的 1 个单位完全不同。
1赞 kmdreko 9/9/2023
我的直觉是使用 64 位浮点秒,在大爆炸点的精度低于 1 小时(如果我的餐巾纸数学是正确的)。
0赞 beyarkay 9/9/2023
宇宙的热寂大约在 10^100 年内,所以恐怕 64 位(或 128 位)不会削减它
1赞 kmdreko 9/9/2023
@beyarkay是的,它可能有这个问题(取决于你所说的“彼此接近”是什么意思),因为浮点数具有固定的精度,而不管刻度如何。但你也说过你“不需要毫秒精度 [..]对于数百万年前发生的事件”。那么你需要多大的精度呢?

答: 暂无答案