您的位置:首页 > 数据库 > Oracle

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

2017-10-12 10:42 441 查看
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型
4000
:1467770970
long lTime = date.getTime() ;
System.out.println(lTime);

格式long型转成Date型,再转成String:  1464710394 -> 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,但是后台得到的是下面的date。

String 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')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  日期 java oracle