在 java 中使用 GregorianCalendar 在 Oracle SQL 中插入时间

Insert time in Oracle SQL using GregorianCalendar in java

在我的 oracle SQL table 中,我有一个默认为 CURRENT_TIMESTAMP 的列,我相信 returns 带有时区的时间戳。我想使用 GregorianCalendar 对象更新此列。我试了一下,看看是什么 returns:

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

date.getTime() returns Thu Aug 27 19:50:34 EDT 2020,但我不确定这是不是正确的格式。我相信它应该是 1960-01-01 23:03:20

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

函数current_timestamp returns数据类型TIMESTAMP WITH TIME ZONE,所以你的问题不是时间戳的格式,而是找正确的 class

oracle.sql.TIMESTAMPTZ

对应的setter是

setTIMESTAMPTZ

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

注意current_timestamp使用连接会话的时区,所以如果你想实现相同的逻辑,你可以添加相关的时区GregorianCalendar

的构造函数
GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT-8"))
Timestamp tst = new Timestamp(cal.getTimeInMillis())

def stmt = con.prepareStatement("update tab set  curr_tst = ?")
stmt.setTIMESTAMPTZ(1,new oracle.sql.TIMESTAMPTZ(con,tst,cal))
stmt.executeUpdate()

您可以从 GregorianCalendar 中获取 ZonedDateTime 并将其直接用作 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();