日期/时间的格式化(oracle,mysq,java)

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’)

mysql格式化日期

1,标准格式化
SELECT DATE_FORMAT(b.borrow_addtime,’%Y-%m-%d’) borrowAddTime,DATE_FORMAT(b.publish_datetime,’%Y-%m-%d %T’) publishTime FROM B b
PS:
1.%T 24 小时的时间形式(h h : m m : s s)
2. %r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
2,当前日期前一天
DATE_FORMAT(a.date,’%Y-%m-%d’) = ‘2018-02-02’ - INTERVAL 1 day

java中格式化
1,标准格式化
SimpleDateFormat format0 = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String time = format0.format(new Date());
String time = format0.format(ss.getTime());//这个就是把时间戳经过处理得到期望格式的时间

2,sql.Date 和 util.Date
java.sql.Date转为java.util.Date
java.sql.Date date=new java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());

java.util.Date转为java.sql.Date
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

而且,无论是sql.Date还是util.Date 都可以被SimpleDateFormat 转换格式。

3,分别获取年月日
SimpleDateFormat simdf = new SimpleDateFormat(“MM月dd日”);

Calendar cal = Calendar.getInstance();
System.out.println(“现在时间:”+simdf.format(cal.getTime()));
//分别获取年、月、日
System.out.println(“年:”+cal.get(cal.YEAR));
System.out.println(“月:”+(cal.get(cal.MONTH)+1));//老外把一月份整成了0,翻译成中国月份要加1
System.out.println(“日:”+cal.get(cal.DATE));

cal.set(cal.DAY_OF_WEEK, cal.MONDAY);
String weekhand = simdf.format(cal.getTime());
System.out.println(“当前时间所在周周一日期:”+weekhand);
//cal.set(cal.DAY_OF_WEEK, cal.SUNDAY);这个不符合中国人的时间观,老外把上周周日定为一周的开始。

cal.set(Calendar.DATE, cal.get(cal.DATE) + 6);
String weeklast = simdf.format(cal.getTime());
System.out.println(“当前时间所在周周日日期:”+weeklast);

4,得到本月的第一天
public String getMonthFirstDay() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
SimpleDateFormat firstDay= new SimpleDateFormat(“yyyy-MM-dd”);
return firstDay.format(calendar.getTime());
}
,5,得到本月的最后一天
public String getMonthLastDay() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
SimpleDateFormat lastDay= new SimpleDateFormat(“yyyy-MM-dd”);
return lastDay.format(calendar.getTime());
}

推荐博客:
java的日期格式使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值