Java 如何将unix时间戳转换为oracle日期
我在oracle中有一个日期类型,我想在其中插入unix时间戳数据 我在PL/SQL中使用这个SQL查询,它可以工作Java 如何将unix时间戳转换为oracle日期,java,sql,oracle,unix,timestamp,Java,Sql,Oracle,Unix,Timestamp,我在oracle中有一个日期类型,我想在其中插入unix时间戳数据 我在PL/SQL中使用这个SQL查询,它可以工作 select TO_DATE('19700101','yyyymmdd') + 1413360712/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24 from dual; 输出是正确的 2014/10/15 16:11:52 但是当我在java中使用它时,输出是不同的 String
select TO_DATE('19700101','yyyymmdd') + 1413360712/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24 from dual;
输出是正确的
2014/10/15 16:11:52
但是当我在java中使用它时,输出是不同的
String sql = "insert into appliance_application (id, emp_id, typeid, num, spec, action, actiontime, oper_id) VALUES(applianceapplication_seq.nextval, ?, ?, ?, ?, ?, TO_DATE('19700101','yyyymmdd') + 1413360712/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24, ?)";
pstmt = conn.prepareStatement(sql);
for(int i=0; i < list.size(); i++){
Itembean ib = (Itembean)list.get(i);
pstmt.setObject(1, ib.getEmpid());
...
pstmt.setObject(5, ib.getAction());
// pstmt.setLong(6, ib.getActiontime());
// pstmt.setObject(7, ib.getOper_id());
pstmt.setObject(6, ib.getOper_id());
log.info(ib.getActiontime()+ "....");
pstmt.addBatch();
}
...
String sql=“插入到设备应用程序(id、emp id、typeid、num、spec、action、actiontime、oper id)值(applianceapplication_seq.nextval、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、;
pstmt=conn.prepareStatement(sql);
对于(int i=0;i
我检查插入的数据,发现输出错误
2014/10/15 8:11:52
我的会话时区是+8。
怎么了?试试下面的代码:
public Timestamp parseDateToTimestamp(java.util.Date inDate)
{
if (inDate == null)
return null;
return new java.sql.Timestamp(inDate.getTime());
}
您确定Java会话的
sessiontimezone
实际上是+8吗?我敢打赌Java应用服务器的区域设置是将会话时区设置为GMT,所以它是关于Java会话时区的。我在windows上使用Tomcat7。我不知道在catalina.bat中添加-Duser.timezone=GMT+08
的位置。我搜索了很多,但没有一个有效。在截止日期('19700101','yyyyymmdd')+1413360712/86400+截止号码(SUBSTR(TZ偏移量(sessiontimezone),1,3))/24、,,sessiontimezone不起作用。我想它在oracle上运行,我不明白为什么。最后我添加了8/24,这不是一个好的解决方案。谢谢@JustinCave