Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将unix时间戳转换为oracle日期_Java_Sql_Oracle_Unix_Timestamp - Fatal编程技术网

Java 如何将unix时间戳转换为oracle日期

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

我在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 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