【问题标题】:Oracle query for Convert from Julian value to Date with TimeOracle 查询从儒略值转换为带时间的日期
【发布时间】:2026-01-20 13:10:01
【问题描述】:

我必须随时间从儒略值转换为常规日期。

Select to_char(to_date(2455198, 'J'), 'DD-MM-YYYY HH:mm:ss') from dual;

此查询有效,结果为01-01-2010 12:00:00

Select to_char(to_date(2455197.75001, 'J'), 'DD-MM-YYYY HH:mm:ss') from dual;

上面的这个查询不起作用并得到这个错误:

ORA:01830: 日期格式图片在转换整个输入字符串之前结束

儒略值:2455197.75001,等效日期值为:1-January-2010 06:00:01

【问题讨论】:

    标签: oracle timestamp julian-date


    【解决方案1】:

    正如@Chris 所说,J 需要一个整数,因此您可以使用floortrunc 来获得它,并将小数部分用作部分天数(并添加另外半天,正如@Chris 指出的那样在评论中,考虑朱利安天starting at noon):

    Select to_char(
        to_date(floor(2455197.75001), 'J')
          + mod(2455197.75001, 1)
          + 0.5,
      'DD-MM-YYYY HH24:mi:ss')
    from dual;
    

    得到:

    01-01-2010 06:00:01
    

    请注意,我将HH 更改为HH24,并将第二个mm 更改为mi 几分钟。

    db<>fiddle

    【讨论】:

    • 儒略日从中午开始,儒略转换后的日期需要再增加半天(12小时)
    • 啊,我不知道,谢谢!奇怪的是,甲骨文当时没有将时间部​​分设置为中午。
    【解决方案2】:

    您不能将分数与儒略值一起使用。作为docs state

    朱利安日;自公元前 4712 年 1 月 1 日以来的天数。 编号 用 J 指定的必须是整数。

    【讨论】: