日常小结篇-日期处理(java程序,Oracle数据库)

来源:互联网 发布:成都大数据协会 编辑:程序博客网 时间:2024/05/17 23:14

java程序中:
对应资源包

        import java.util.Date;        import java.text.SimpleDateFormat;
对应程序        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy年MM月dd日 " );//设置日期格式。        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    PS:为什么有的格式大写,有的格式小写,那是怕避免混淆,例如MM是月份,mm是分;HH是24小时制,而hh是12小时制。    日期转字符串        String str = df.format(new Date());  //获取系统当前时间,并转换为字符串格式内容。    字符串转日期        “2008-07-10 19:20:00” 要把它转成日期,可以用 Date date = sdf.parse( " 2008-07-10 19:20:00 " );    获得系统当前时间         Date date =new Date();    日期格式转成long型:1467770970          long lTime = date.getTime() ;          System.out.println(lTime);      格式long型转成Date型,再转成String1464710394 -> ltime2*1000 -> 2016-05-31 23:59:54          long ltime2 = 1464710394;   //日期的long格式        SimpleDateFormat lsdFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          Date lDate = new Date(ltime2*1000);          String lStrDate = lsdFormat.format(lDate);          System.out.println(lStrDate);      其他格式的日期转换为正常格式日期       日期原本是:2015-12-8 0:0:0,但是后台得到的是下面的dateString date = "2015-12-7T16:00:00.000Z";          date = date.replace("Z", " UTC");//注意是空格+UTC         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");//注意格式化的表达式         Date d = format.parse(date);         System.out.println(d);         SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");//注意格式化的表达式"         String dateStr = format2.format(d);         System.out.println(dateStr);           结果:            Tue Dec 08 00:00:00 CST 2015            2015-12-08       解释:       用的是UTC 通用标准,以z来标识我们所在的国内时区,+8区。    可以分别得到时间年,月,日         Calendar c = Calendar.getInstance();//可以对每个时间域单独修改,获取的是系统当前时间         int year = c.get(Calendar.YEAR);          int month = c.get(Calendar.MONTH);          int date = c.get(Calendar.DATE);          int hour = c.get(Calendar.HOUR_OF_DAY);          int minute = c.get(Calendar.MINUTE);          int second = c.get(Calendar.SECOND);          System.out.println(year + "/" + month + "/" + date + " " +hour + ":" +minute + ":" + second);       结果:        2017/9/12 10:16:13     Oracle数据库中日期数据插入问题         往Oracle数据库中插入日期型数据(to_date的用法)         INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-20 18:31:34' , 'YYYY-MM-DD HH24:MI:SS' ) ) ;         查询显示:2007-12-20 18:31:34.0         -------------------         INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-14 14:10' , 'YYYY-MM-DD HH24:MI' ) );         查询显示:2007-12-14 14:10:00.0         -------------------         INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-14 14' , 'YYYY-MM-DD HH24' ) );         查询显示:2007-12-14 14:00:00.0         -------------------         INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-11-15' , 'YYYY-MM-DD' ) );         查询显示:2007-11-15 00:00:00.0         -------------------         INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-09' , 'YYYY-MM' ) );         查询显示:2007-09-01 00:00:00.0         -------------------         INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007' , 'YYYY' ) );         查询显示:2007-05-01 00:00:00.0         -------------------     PS:    1.当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。     如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。     同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。     但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,而是取整到当前    2,oracle中日期可以直接用算数运算符比较,如:    oracle 查询日期区间内的数据一般最常用的就是between and>=,<=(或者不要等号)了;            举例:select * from tablename t where t.日期列 between to_date('2015-10-20 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2015-10-20 23:59:59','yyyy-mm-dd hh24:mi:ss')            或者:              select * from tablename where t.日期列 >= to_date('2015-10-20 00:00:00','yyyy-mm-dd hh24:mi:ss') and t.日期列 <= to_date('2015-10-20 23:59:59','yyyy-mm-dd hh24:mi:ss')    如果要查询开区间的数据只需将>=<=改为><就行。    PS:       在ORACLE操作日期格式的数据的时候,会出现的问题       1、无效的月份问题    最近在往数据库中插入时间时,Oracle报“无效的月份问题”,具体SQL如下:                 INSERT INTO TS_COUNT (               ID,CNAME, STARTTIME, ENDTIME,VALUE               ) VALUES (                   1, 'John', '01/06/2013', '02/06/2013', 800               );             报错:ORA-01843:无效的月份。这是由于日期格式不对造成的。            解决办法:        2、日期插入格式问题            插入日期格式数据时,报ORA-01861: 文字与格式字符串不匹配。            如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07:24'),没有指定日期格式,就会报错:ORA-01861: 文字与格式字符串不匹配,必须指定日期格式。            如下: to_date('2007-12-28 10:07:24' , 'yyyy-mm-dd hh24:mi:ss')