Java ORACLE-ORA-01843:在ORACLE 19版本中不是有效的月份

Java ORACLE-ORA-01843:在ORACLE 19版本中不是有效的月份,java,oracle,Java,Oracle,当我的系统语言更改为德语并将其作为可执行jar运行时,我面临这个问题 与 这是我的日期格式 TO_DATE('31-MAR-2021 12:06:08','dd-MON-yyyy HH23:MI:SS'); 运行时没有问题 java -jar -Duser.language=en and -Duser.country=US %MY_JAR_NAME% 运行时出现问题: java-jar%MY\u jar\u NAME% 或使用: aDATEliteral和INTERVALliteral:

当我的系统语言更改为德语并将其作为可执行jar运行时,我面临这个问题 与

这是我的日期格式

TO_DATE('31-MAR-2021 12:06:08','dd-MON-yyyy HH23:MI:SS');
运行时没有问题

java -jar -Duser.language=en and -Duser.country=US %MY_JAR_NAME%
运行时出现问题:

java-jar%MY\u jar\u NAME%
或使用:

  • a
    DATE
    literal和
    INTERVAL
    literal:

    DATE '2021-03-31' + INTERVAL '12:06:08' HOUR TO SECOND
    
    TIMESTAMP '2021-03-31 12:06:08'
    
  • 时间戳
    文字:

    DATE '2021-03-31' + INTERVAL '12:06:08' HOUR TO SECOND
    
    TIMESTAMP '2021-03-31 12:06:08'
    
  • 截止日期
    带数值:

    TO_DATE( '31-03-2021 12:06:08', 'DD-MM-YYYY HH24:MI:SS' )
    
  • 到目前为止
    使用明确的语言:

    TO_DATE( '31-MAR-2021 12:06:08', 'DD-MON-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American' )
    
  • 或者,跳过将日期转换为Java中的字符串,然后再转换回数据库中的日期,只需使用
    Java.time.Instant
    oracle.sql.date
    将绑定变量作为
    date
    数据类型传递即可


dbfiddle

另一个很好的例子,为什么您永远不应该依赖于依赖于区域设置的日期格式(或为周围的日期值传递字符串)
HH23
???这不应该是
HH24
?覆盖语言:
到日期('2021年3月31日12:06:08','dd-MON-yyyyyyh23:MI:SS','NLS\u DATE\u language=American')
当数据库中的所有月份都是英语时,只需将
'NLS\u DATE\u language'
参数设置为
美式即可。三月的正确德语MON应该是(
MÄR
for(
März
)…将参数传递为SimpleDataFormat(“dd-MMM-yyyy-HH:mm:ss”,新语言环境(“en”)。感谢使用明确的语言解决了问题