Julia中Dates.value函数工作原理解析:日期转整数的计算逻辑
Julia中Dates.value(Date)的工作机制与日期转整数解析
问题背景
在Julia中,Dates.value(Date)会返回日期的整数表示,示例代码如下:
using Dates dt = Date(2020, 01, 01) println(Dates.value(dt)) # 输出:737425
需要明确:Dates.value函数的工作机制是什么?以及2020-01-01如何转换为整数737425?
Dates.value函数的工作机制
- Julia的
Date类型底层用一个整数存储日期,这个整数对应Rata Die日期计数系统的数值——这是一种连续无歧义的日期计数方式。 Dates.value(Date)的作用很直接:就是读取并返回Date对象内部存储的这个整数值,没有额外的复杂转换逻辑,只是暴露底层数据。- 该计数系统基于扩展格里高利历(Proleptic Gregorian Calendar),即把格里高利历的闰年规则回溯应用到所有历史日期,避免了历史历法切换带来的日期歧义。
2020-01-01转换为737425的计算过程
Rata Die的计数起点是公元前1年12月31日(即公元0年1月1日的前一天),从这天开始每过一天数值加1。我们可以分步计算得到目标值:
- 计算公元1年到2019年的总天数:
- 这期间共2019年,按照格里高利历规则计算闰年数量:
floor(2019/4) - floor(2019/100) + floor(2019/400)= 504 - 20 + 5 = 489个。 - 平年数量为2019 - 489 = 1530个,总天数为:
1530*365 + 489*366 = 737424天。
- 这期间共2019年,按照格里高利历规则计算闰年数量:
- 加上2020年1月1日的天数:
- 2020年1月1日是当年的第1天,所以总天数为
737424 + 1 = 737425,和示例输出完全匹配。
- 2020年1月1日是当年的第1天,所以总天数为
另外,也可以通过儒略日(JD)转换验证:2020-01-01的儒略日是2458849.5,Rata Die值 = 儒略日 - 1721424.5,计算得2458849.5 - 1721424.5 = 737425,结果一致。
内容的提问来源于stack exchange,提问作者Bex T.
相关产品推荐
相关产品推荐

