使用Java中的GregorianCalendar在Oracle SQL中插入时间

问题描述

在我的oracle sql表中,我有一列认为CURRENT_TIMESTAMP,我相信它会返回带有时区的时间戳。我想通过使用GregorianCalendar对象来更新此列。我尝试了一下以查看返回的结果:

GregorianCalendar date = new GregorianCalendar();
System.out.println("                             date is: " + date.getTime());

date.getTime()返回Thu Aug 27 19:50:34 EDT 2020,但是我不确定这是否是正确的格式。我认为应该是1960-01-01 23:03:20

更新时间戳列的正确格式是什么?如何使用GregorianCalendar对象创建具有适用于Oracle sql时间戳类型的正确格式的时间戳?

解决方法

您可以从ZonedDateTime中获得一个GregorianCalendar,并将其直接用作PreparedStatement的参数:

GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT-8"));
ZonedDateTime zdt = cal.toZonedDateTime();
pstmt = con.prepareStatement("update the_table set the_column = ? where id = ?");
pstmt.setObject(1,zdt);
pstmt.setInt(2,42);
pstmt.executeUpdate();
,

函数current_timestamp返回数据类型TIMESTAMP WITH TIME ZONE,因此您的问题不是时间戳的 format ,而是找到合适的 class

oracle.sql.TIMESTAMPTZ

和相应的二传手是

setTIMESTAMPTZ

下面的摘要首先将日历转换为java.sql.Timestamp,然后转换为oracle.sql.TIMESTAMPTZ

请注意,current_timestamp使用所连接会话的时区,因此,如果要实现相同的逻辑,则可以在{的构造函数中添加相关的时区{1}}

GregorianCalendar