目录
一、获取时间和日期
通过java.util从系统获取当前时间
通过java.sql类型数据获取时间
将字符串转换成java.util.Date类型数据
将毫秒数转换成java.util.Date类型数据
二、数据库中存储日期的三种数据类型
三、数据库中三种数据对应Java中获取数据的存储结果
数据库数据类型为date
数据库数据类型为datatime
数据库数据类型为timestamp
四、java.util和java.sql之间时间日期的转换
通过getTime()方法将util.date转换成sql.date
通过getTime()方法将sql.date转换成util.date
一、获取时间和日期
通过java.util从系统获取当前时间
import java.util.Date;
import java.text.SimpleDateFormat;
public class time {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println( df.format(new Date()) );
}
}
//输出:2019-01-07 10:51:35
//df.format(new Date())返回的是一个格式化时间的字符串
获取当前时间,以字符串返回。由返回值可以看到 java.util.Date 获取的是完整的时间包括日期和时间
通过java.sql类型数据获取时间
java.sql.Date ctime = new java.sql.Date(new java.util.Date().getTime());
System.out.println(df.format( ctime ));
java.sql.Timestamp ctime2 = new java.sql.Timestamp(new java.util.Date().getTime());
System.out.println(df.format( ctime2 ));
//输出
//2019-01-07 10:59:28
//2019-01-07 10:59:28
通过输出的结果可以发现,java.sql 存储的时间日期数据也是完整的。
将字符串转换成java.util.Date类型数据
String strDate="2005年04月22日";
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日");
try {
Date date = simpleDateFormat.parse(strDate);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
//输出Fri Apr 22 00:00:00 CST 2005
将毫秒数转换成java.util.Date类型数据
long now=System.currentTimeMillis();
System.out.println("毫秒数:"+now);
Date dNow=new Date(now);
System.out.println("日期:"+dNow);
//输出
//毫秒数:1546830663261
//日期:Mon Jan 07 11:11:03 CST 2019
二、数据库中存储日期的三种数据类型
Mysql中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp。
Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
Timestamp类型:也是存储既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。
所有不符合上面所述格式的数据都会被转换为相应类型的0值。(0000-00-00或者0000-00-00 00:00:00)
三、数据库中三种数据对应Java中获取数据的存储结果
数据库数据类型为date
Timestamp ctime = new java.sql.Timestamp(new java.util.Date().getTime());
pstmt.setTimestamp(11, ctime);
//存入数据:2019-01-07
java.sql.Date ctime = new java.sql.Date(new java.util.Date().getTime());
pstmt.setDate(4, ctime);
//存入数据:2019-01-07
数据库数据类型为datatime
Timestamp ctime = new java.sql.Timestamp(new java.util.Date().getTime());
pstmt.setTimestamp(11, ctime);
//存入数据:2019-01-07 10:35:10
Date ctime = new java.sql.Date(new java.util.Date().getTime());
pstmt.setDate(4, ctime);
//存入数据:2019-01-07 00:00:00
数据库数据类型为timestamp
java.sql.Timestamp ctime = new java.sql.Timestamp(new java.util.Date().getTime());
pstmt.setTimestamp(11, ctime);
//存入数据:2019-01-07 10:42:14
java.sql.Date ctime = new java.sql.Date(new java.util.Date().getTime());
pstmt.setDate(4, ctime);
//存入数据:2019-01-07 00:00:00
由datatime和timestamp的对比可以看出,两者在数据库中的存储内容相同(格式不同)。其次,虽然在java.sql.Timestamp和java.sql.Date中都存储的是完整的时间日期数据,但是在向数据库写入时结果却不相同。
四、java.util和java.sql之间时间日期的转换
java.util.Date通常情况下用它获取当前时间或构造时间,java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分。它们都有getTime方法返回毫秒数,都可以直接构造
通过getTime()方法将util.date转换成sql.date
java.util.Date utilDate = new java.util.Date(); //获取当前时间
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); //通过getTime()转换
通过getTime()方法将sql.date转换成util.date
java.util.Date utilDate = new java.util.Date(sqlDate.getTime()); //通过getTime()转换,一般sql.date在数据库的存取时使用。