Java 转换为UTC日期后生成时间戳

Java 转换为UTC日期后生成时间戳,java,oracle,groovy,Java,Oracle,Groovy,我试图在Oracle表中的Timestamp(6)列上插入datetime字符串值 但是我得到了ORA-01843:不是有效的月份错误 有没有一种方法可以实现这种特定于groovy的,而不指定oracle函数,如to_date或to_timestamp 2017-12-15 14:39:45 尝试使用来添加时间戳: SELECT TO_TIMESTAMP ('2017-12-15 14:39:45', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 是,您可以

我试图在Oracle表中的Timestamp(6)列上插入
datetime
字符串值

但是我得到了
ORA-01843:不是有效的月份
错误

有没有一种方法可以实现这种特定于groovy的,而不指定oracle函数,如
to_date
to_timestamp

2017-12-15 14:39:45

尝试使用
来添加时间戳

SELECT
    TO_TIMESTAMP ('2017-12-15 14:39:45', 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;

是,您可以设置会话参数:

alter session set nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
设置此参数后,可以以文本字符串形式输入日期


您也可以将这些值设置为环境变量,或在注册表中设置为
HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY\uU%ORACLE\u HOME\u NAME%
,resp
HKLM\SOFTWARE\ORACLE\KEY\uU%ORACLE\u HOME\u NAME%

@DON I read right。将文本转换为时间戳的标准方法是通过
转换为\u timestamp
。使用它没有什么错,但首先你不应该将日期存储为文本。我不知道原因,但在问题中明确指出,他/她寻找的解决方案不带
到时间戳
@WernfriedDomscheit,我们不局限于根据OP所说的回答。谢谢!我之所以必须这样做,是因为java/groovy特定于我的数据库在
MySQL
OracleDB
等环境中有所不同。所以很明显,
to_timestamp
在MySQL中不起作用,所以如果不编写不同的代码块,我想用groovy来处理这个问题specific@WernfriedDomscheit你会假设很多事情。通过脚本与每个数据库交互应该是特定于平台的。Java有用于此目的的ORM工具,但OP没有使用它们。
2017-12-15 14:39:45
与“UTC日期”无关。这正是我同意的格式(或者更准确地说类似于)。事实上,日期时间是
2017-12-15 15:39:45+01:00
并进行了转换,因此我提到了UTC日期我对groovy不太熟悉,但是准备好的语句和绑定变量呢?那么日期格式就不重要了。@DON每个数据库都有自己的Java驱动程序。我不知道Groovy,但是这里最好的选择可能是检测数据库,然后使用正确的接口。即使Wernfred的解决方案适用于Oracle,其他数据库呢?默认情况下,MySQL根据ISO-8601接受日期文本。但是,也有其他RDBMS(例如SQL Server)在默认情况下不接受ISO格式或没有显式转换。Java端本身不会有任何方法吗?好问题,我不知道。Java很可能不读取Windows注册表以实现平台独立性。不过,我假设设置环境变量应该可以工作。请避免在我的答案下给出冗长的注释。你最近的评论没有说什么,没有添加什么,等等。