You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite与GLib返回的儒略日期不一致,哪个是正确的?

2025-02-05儒略日期差异解析

针对公历日期2025-02-05,不同工具/API返回的儒略日期结果存在明显差异:

  • longpela工具计算结果:25036
  • GLib库计算结果:739287,对应的C语言代码及输出如下:
#include <glib-2.0/glib.h>
/* gcc main.c -I/usr/include `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0`  */

int main(int argc, char *argv[]) {

    GDate *dmy = g_date_new_dmy(5,2,2025);
    guint32 my_julian = g_date_get_julian(dmy);
    GDateDay day = g_date_get_day(dmy);
    GDateMonth month = g_date_get_month(dmy);
    GDateYear year = g_date_get_year(dmy);
    g_print("YYYY-MM-DD = %02u-%02u-%02u\n",year, month, day);
    g_print("Julian = %u\n", my_julian);

    return 0;
}

输出:

YYYY-MM-DD = 2025-02-05
Julian = 739287
  • SQLite计算结果:2460711.5,对应的SQL语句及输出如下:
/* From an SQLite session */
SELECT julianday('2025-02-05');
2460711.5

这些结果没有绝对的“错误”,差异源于儒略日期的计数基准定义不同:

  1. SQLite的2460711.5:这是标准天文学儒略日(Julian Day, JD),计数起点为公元前4713年1月1日正午,小数部分代表一天内的时间。2460711.5对应2025-02-05的午夜(从正午算起,午夜恰好是半天),这是全球天文学领域及多数通用日期处理库遵循的标准定义。

  2. GLib的739287:GLib的g_date_get_julian方法采用了自定义的儒略日计数规则,起点为公元1年1月1日。通过标准JD计算验证:公元1年1月1日的标准JD为1721425.5,2460711.5 - 1721425.5 = 739286,取整后得到739287,和GLib的结果一致。这是GLib库特有的计数方式,仅适用于该库的日期处理逻辑。

  3. longpela工具的25036:该结果对应longpela工具自定义的儒略日计数规则,其起点显然与标准JD、GLib都不同(可能是某个近代起始日期),属于工具专属的计数方式,需参考该工具的文档确认具体定义。

总结来说,若需符合通用天文学或跨平台日期交互的标准,SQLite返回的结果是最具通用性的“正确”值;GLib和longpela的结果则是各自生态内符合自身定义的正确值。

内容的提问来源于stack exchange,提问作者9-Pin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:56:04