问题描述
在我的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
和相应的二传手是
下面的摘要首先将日历转换为java.sql.Timestamp
,然后转换为oracle.sql.TIMESTAMPTZ
请注意,current_timestamp
使用所连接会话的时区,因此,如果要实现相同的逻辑,则可以在{的构造函数中添加相关的时区{1}}
GregorianCalendar