目录

一、获取时间和日期

通过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在数据库的存取时使用。