【问题标题】:how to convert unix timestamp to oracle DATE如何将 unix 时间戳转换为 oracle DATE
【发布时间】:2014-12-10 06:10:41
【问题描述】:

我在 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();
            }

...

我检查插入的数据,发现输出错误。

2014/10/15 8:11:52

我的会话时区是 +8。 怎么了?

【问题讨论】:

  • 你确定Java会话的sessiontimezone实际上是+8吗?我敢打赌,Java 应用服务器的语言环境将会话时区设置为 GMT。
  • 所以它是关于 Java 会话时区的。我在 Windows 上使用 tomcat 7。我不知道在 catalina.bat 的哪里添加-Duser.timezone=GMT+08
  • 我搜索了很多,但没有一个有效。在TO_DATE('19700101','yyyymmdd') + 1413360712/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24, ?) 中,sessiontimezone 不起作用。我认为它在oracle上运行,我不明白为什么。最后我添加了8/24,这不是一个好的解决方案。谢谢@JustinCave

标签: java sql oracle unix timestamp


【解决方案1】:

试试这个代码:

public Timestamp parseDateToTimestamp(java.util.Date inDate)
{
    if (inDate == null)
        return null;

    return new java.sql.Timestamp(inDate.getTime());
}

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2015-10-07
    • 2012-08-19
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2011-06-02
    相关资源
    最近更新 更多