java date 从年取到秒,存进oracle date字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java date 从年取到秒,存进oracle date字段相关的知识,希望对你有一定的参考价值。

java date 从年取到秒,存进oracle date字段
Date d = new Date();
SimpleDateFormat fm= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //the date format
String strDate=fm.format(d);
d=fm.parse(strDate);
可以吗

就是把时间按yyyy-MM-dd HH:mm:ss这种形式传进数据库,数据库的类型是date

直接new的话,数据库保存的是yyyy-MM-dd 这个,没有时间,怎么回事

Date strDate=fm.format(d); d就是你传近来的string
d不是date类型吗,fm.format(d)返回值不是string类型吗?

String strDate=fm.format(d);这个已经变成了yyyy-MM-dd HH:mm:ss这种形式,可是数据库是date类型,怎么存。

多谢大家

不用格式化,直接放new Date()进去就可以了。
除非你的oracle保存的是string类型的日期,但是看你这样写
也不是。

----------------------
oracle 保存的是精确时间,但是显示只能看到
yyyy-mm-dd,你在这个时间边上点向下的一个箭头
可以看到精确时间。
参考技术A 搞不懂你要干什么,你是要把string 转化成date存进数据库呢还是要不date里的年到秒一个一个取出来存进数据库?如果是要把string 转化成date存进数据库SimpleDateFormat fm= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date strDate=fm.format(d); d就是你传近来的string

如果是要分开这是
strDate.getYear();
strDate.getMonth();
strDate.getDay();
strDate.getHour();
....可以一直取到秒.
参考技术B jdbc

java中从1970-1-1到当前时间之间的毫秒数转换为oracle date

java中System.currentTimeMillis()取到的是从1970-01-01 00:00:00.000到当前时间的毫秒数,一个long类型的值。

现在oracle数据库中某表中存取的是该值,需要将其转换为可读的date类型。

current millis 中提供了TimeMillis的转换结果以及一些常用的转换方法。

但是其中关于pl/sql取得的数是精确到千毫秒,而不是精确到毫秒。

整理了一个包来进行currentTimeMillis到date的转换。

注意:System.currentTimeMillis()取得的是当前时区的时间,所以在转换的时候需要注意时区的转换。

select sessiontimezone,dbtimezone,sysdate,current_date from dual;

 

CREATE OR REPLACE PACKAGE cux_time_utils_pkg IS

    FUNCTION unix_timestamp_to_utc_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC;

    FUNCTION unix_timestamp_to_session_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC;

    FUNCTION date_to_unix_timesecond(in_date IN DATE) RETURN NUMBER DETERMINISTIC;

    FUNCTION date_to_unix_times_millis(in_date IN DATE) RETURN NUMBER DETERMINISTIC;

    FUNCTION java_currenttimemillis RETURN NUMBER;

    FUNCTION current_unix_times_millis RETURN NUMBER DETERMINISTIC;
END

 

CREATE OR REPLACE PACKAGE BODY cux_time_utils_pkg IS

    --return utc0 date
    --返回0时区时间
    FUNCTION unix_timestamp_to_utc_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC IS
        v_date DATE;
    BEGIN
        v_date := to_date(1970-01-01,
                          yyyy-mm-dd) + in_unix_timestamp / 1000 / 60 / 60 / 24;
        RETURN v_date;
    END;

    --return sessiontimezone date
    --返回当前回话时区时间
    --select sessiontimezone,dbtimezone,sysdate,current_date from dual;
    FUNCTION unix_timestamp_to_session_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC IS
        v_date DATE;
    BEGIN
        v_date := to_date(1970-01-01,
                          yyyy-mm-dd) + in_unix_timestamp / 1000 / 60 / 60 / 24 +
                  to_number(substr(tz_offset(sessiontimezone),
                                   1,
                                   3)) / 24;
        RETURN v_date;
    END;

    --返回1970-01-01 00:00:00到in_date之间的秒数
    FUNCTION date_to_unix_timesecond(in_date IN DATE) RETURN NUMBER DETERMINISTIC IS
        v_unix_timestamp NUMBER;
    BEGIN
        v_unix_timestamp := (in_date - to_date(1970-01-01,
                                               yyyy-mm-dd)) * 60 * 60 * 24;
        RETURN v_unix_timestamp;
    END;

    --返回1970-01-01 00:00:00到in_date之间的毫秒数
    --此方法不够精确,因为in_date精度为秒,所以返回值的精度为千毫秒
    --可调整入参结构为timestamp,再进行优化
    FUNCTION date_to_unix_times_millis(in_date IN DATE) RETURN NUMBER DETERMINISTIC IS
        v_unix_timestamp NUMBER;
    BEGIN
        v_unix_timestamp := (in_date - to_date(1970-01-01,
                                               yyyy-mm-dd)) * 1000 * 60 * 60 * 24;
        RETURN v_unix_timestamp;
    END;

    --返回java的当前毫秒数
    FUNCTION java_currenttimemillis RETURN NUMBER AS
        LANGUAGE JAVA NAME java.lang.System.currentTimeMillis() return java.lang.Integer;


    --返回当前时间的毫秒数
    FUNCTION current_unix_times_millis RETURN NUMBER DETERMINISTIC IS
        v_unix_timestamp NUMBER;
    BEGIN
        v_unix_timestamp := extract(DAY FROM(systimestamp - to_timestamp(1970-01-01,
                                                                     YYYY-MM-DD))) * 1000 * 60 * 60 * 24 +
                            to_number(to_char(sys_extract_utc(systimestamp),
                                              SSSSSFF3));
        RETURN v_unix_timestamp;
    END;

END;

 

参考:

https://currentmillis.com/

http://stackoverflow.com/questions/2824710/oracle-equaivalent-of-java-system-currenttimemillis

http://stackoverflow.com/questions/4312514/get-date-from-a-long-var-char-milliseconds-value-stored-in-oracle-database

http://developer-should-know.com/post/77394226827/converting-between-milliseconds-and-dates-in

 

以上是关于java date 从年取到秒,存进oracle date字段的主要内容,如果未能解决你的问题,请参考以下文章

oracle 如何按天分组?比如一个表有个字段ST(date 类型)精确到秒,如何使用ST按天分组?

将日期从年/月/日更改为年/月/日

oracle 存储日期精确到哪位

Oracle日期类型占用的空间

java中从1970-1-1到当前时间之间的毫秒数转换为oracle date

从年,月,日创建java日期对象