如何获得TIMESTAMP WITH TIME ZONE列值和行从oracle where子句查询?



我有一个列类型为TIMESTAMP with TIME ZONE的表。我想读取行SELECT * FROM " test_timestamp_wtz_2 "Where time_with_zone = ?;

String d = "2021-10-18 16:11:10.0 Europe/Paris";
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.n VV");
ZonedDateTime tm = ZonedDateTime.parse(d, dtf2); 
// OffsetDateTime odt =OffsetDateTime.parse(d,dtf2); 
// String z = tm.getZone().getId();
// System.out.println(tm.getZone());
// ThIS IS THE MAIN CODE 
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
// Calendar c = Calendar.getInstance(); 
// c.setTime(dateFormat.parse(d));
// c.setTimeZone(TimeZone.getTimeZone(z)); 
// Date date = dateFormat.parse(d); 
// String parsed = dateFormat.format(date); 
// Timestamp timestamp = new Timestamp(c.getTimeInMillis()); 
// Datum dtm = new TIMESTAMPTZ(con, new java.sql.Timestamp(c.getTimeInMillis()), c); 
// Datum dtm = new TIMESTAMPTZ(con, new java.sql.Timestamp(c.getTimeInMillis()), tm.getZone());
// PreparedStatement ps = con.prepareStatement(query);
// ps.setObject(1,dtm); 
// ResultSet rs = ps.executeQuery();
// Calendar c = Calendar.getInstance(); 
// while ((rs.next())) { 
//  System.out.println(rs.getObject(2)); 
// }

日期存在于DB中,但我无法基于where子句获得。

谁能帮我纠正我做错了什么?

我建议您不要将现代Date-Time API与遗留API混合使用。java.util日期-时间API及其格式化APISimpleDateFormat过时且容易出错。建议完全停止使用它们,切换到现代的Date-Time API*

使用java.time,现代日期时间API,下面给出的是如何从类型为TIMESTAMP WITH TIMEZONE的字段中提取数据:

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE <some condition>");
while (rs.next()) {
// Assuming the column index of columnfoo is 1
OffsetDateTime odt = rs.getObject(1, OffsetDateTime.class));
System.out.println(odt);
}
rs.close();
st.close();

其中columnfoo的类型为TIMESTAMP WITH TIMEZONE.


*如果你正在为一个Android项目工作,你的Android API级别仍然不兼容Java-8,检查Java 8+可用的API。注意Android 8.0 Oreo已经提供了对java.time的支持。

最新更新