oracle add_months函数与Java不同

niv*_*ner 2 java oracle

我最近发现Oracle在给定日期(使用ADD_MONTHS函数)添加月份与Java向Calendar对象添加月份的方式之间存在差异.

例如在oracle中:

select add_months('2009-02-28', +1) from dual;
Run Code Online (Sandbox Code Playgroud)

产生了结果:"09-03-31"

和查询:

select add_months('2009-02-28', -1) from dual;
Run Code Online (Sandbox Code Playgroud)

产生结果"09-01-31"

但是在Java中,相同计算的结果(使用GregorianCalendar.add()方法)分别是:09-03-28和09-01-28

有没有办法让Oracle和Java的行为相同?(例如oracle中的某些设置或Java中的某些参数)?

Gar*_*ers 5

当您进行月算术时,您需要从业务角度决定处理具有不同天数的月份的正确方法.你提出的问题的另一面是从较长的月份(如8月份)到较短的月份(如2月份)(如果涉及到闰年,甚至从2月到2月).如果您对报告错误感到高兴,因为计算无法找到'Feb-30',那么请查看INTERVAL