在 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是
下面的片段首先将日历转换为 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();
在我的 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是
下面的片段首先将日历转换为 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();