Java ORACLE-ORA-01843:在ORACLE 19版本中不是有效的月份
当我的系统语言更改为德语并将其作为可执行jar运行时,我面临这个问题 与 这是我的日期格式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:
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
literal和DATE
literal:INTERVAL
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”)。感谢使用明确的语言解决了问题