引言
我们经常使用java程序,把日期数据存储到数据库(如Oracle、MySQL)中,或者直接在数据库中插入日期数据,但经常遇到类型、格式转换等错误。此文记录插入日期的常用用法。
1.Oracle
1.1 Oracle中常用的日期类型
1.1.1 DATE
- Oracle中最常用的日期类型,它可以保存日期和时间
- date表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日
- date类型在数据库中的存储固定为7个字节,每个字节分别用来存储世纪,年,月,日,时,分,秒
1.1.2 TIMESTAMP
- 也是Oracle常用的日期类型,它与date的区别是不仅可以保存日期和时间,还能保存小数秒,小数位数可以指定为0-9,默认为6位,所以最高精度可以到ns(纳秒),数据库内部用7或者11个字节存储,如果精度为0,则用7字节存储,与date类型功能相同,如果精度大于0则用11字节存储。
1.2 存储数据到oracle
1.2.1 java存储数据到oracle
- 在jdbc中,我们需要把java.util.Date类型转换为java.sql.Date,然后存储到数据库。(如果数据是字符串则需先转为java.util.Date)
注意:java.util.Date转java.sql.Date会丢失时分秒精度。可以通过转为java.sql.Timestamp或直接使用to_date(“字符串”)作为插入数据库的日期数据解决
//字符串转java.util.date
public java.util.Date getDate(String str) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date result = null;
try {
result = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
//java.util.Date转为java.sql.Date
public java.sql.Date getSqlDate(java.util.Date date){
return new java.sql.Date(date.getTime());
}
- 在一般框架中(如MyBatis),则只需要传入java.util.Date即可
1.2.2 在oracle中直接存储日期数据
需要使用to_date()去转换字符串
-- 注意:oracle数据库中MM和mm都是月份,mi才表示分钟,hh24和hh分别表示24小时制和12小时制
insert into test_date values(to_date('1998/11/11 13:13:13','yyyy/MM/dd hh24:mi:ss'));
insert into test_date values(to_date('1998/11/11 01:13:13','yyyy/MM/dd hh:mi:ss'));
2. MySQL
2.1 MySQL中的常用日期类型
日期类型 | 占用空间 | 日期格式 | 范围 |
---|---|---|---|
DATETIME | 8字节 | yyyy-MM-dd HH:mm:ss | 1000-01-01 00:00:00~~9999-12-31 23:59:59 |
TIMESTAMP | 4字节 | yyyy-MM-dd HH:mm:ss | 1970-01-01 08:00:01~~2038年 |
DATE | 4字节 | yyyy-MM-dd | 1000-01-01~~9999-12-31 |
TIME | 3字节 | HH:mm:ss | -838:59:59~~838:59:59 |
2.2 存储数据到MySQL
2.2.1 java存储数据到MySQL
常用的类型是date和datetime。对于date,只接收年月日,所以要求时分秒精度的话,一般使用datetime。
如何存储---->程序同oracle,只需修改数据源信息(数据库配置信息)即可。
2.2.2 在mysql中直接存储日期数据
可以直接插入字符串
insert into test_date values("2220-02-02 12:12:12");