旧类

Date

java.util.Date 用于封装日期和时间的类。它的核心属性为fastTime。构造方法传入的时间毫秒数就是储存在这个属性上

1、创建Date对象

// 创建一个当前时间的Date对象
// 本质是:fastTime = System.currentTimeMillis();
Date d = new Date();   
// 创建指定时间的Date对象
// 本质是:fastTime = millisec;
Date d = new Date(long millisec);  

2. 常用方法

//若当调用此方法的Date对象在指定日期之后返回true,否则返回false
boolean after(Date date)

//若当调用此方法的Date对象在指定日期之前返回true,否则返回false
boolean before(Date date)

//比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
int compareTo(Date date)

//当调用此方法的Date对象和指定日期相等时候返回true,否则返回false
boolean equals(Object date)

//返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
long getTime()

//返回此对象的哈希码值
int hashCode()

//用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期
void setTime(long time)

//把此Date对象转换为以下形式的String:
//Wed Aug 05 19:35:47 CST 2020
String toString()

SimpleDateFormat(线程不安全,尽量不用)

格式化日期类 继承自 DateFormat。它可以将时间类Date转化为满足要求格式的字符串,也可以将符合要求的字符串转换为Date类

1. 将Date转化为自定义格式的字符串

工厂模式,创建一个SimpleDateFormat对象
再使用这个对象来处理(格式化)时间类。

Date now = new Date( );
// HH 24时制 hh 12时制
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为: " + now);
System.out.println("当前时间为: " + ft.format(now));

/*输出
当前时间为: Wed Aug 05 20:50:11 CST 2020
当前时间为: 2020-08-05 20:50:11
*/

2. 字符串转Date

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
String temp = "2007-10-12 22:34:01";
Date dd = ft.parse(temp);
System.out.println(ft.format(dd));

/*输出:
2007-10-12 22:34:01
*/

Calendar

Calendar类的功能要比Date类强大很多,可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题。而且在实现方式上也比Date类要复杂一些

1. Calendar类对象的创建

Calendar类是一个抽象类,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

//创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期

2. Caledar类简单使用

//获得Calendar实例
Calendar c1 = Calendar.getInstance();

//设置Calendar实例的年,月,日
public final void set(int year,int month,int date)
//把Calendar对象c1的年月日分别设这为:2009、6、12
c1.set(2009, 6, 12);

//设定某个字段,例如日期的值
public void set(int field,int value)
//把c1对象代表的日期设置为10号,其它所有的数值会被重新计算,其他字段设置以此类推
c1.set(Calendar.DATE,10);

//把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算,其他字段设置以此类推
c1.add(Calendar.DATE, 10);

新类

如果是JDK8,可以使用Instant代替Date,LocalDateTime 代替Calendar,DateTimeFormatter代替SimpleDateFormat。

Intant

瞬时类,精确到纳秒,最远可追溯到十亿年前。不可修改类,每次运算都会直接返回一个新的实例。

Instant start = Instant.now();

Duration

时间间隔类,

Instant start = Instant.now();
.....
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start - end);

// 间隔毫秒数
long mills = timeElapsed.toMillis();  

LocalDateTime、LocalDate、LocalTime

本地日期时间类

LocalDateTime now = LocalDateTime.now();

DateTimeFormatter

本地日期格式化类,线程安全。

LocalDateTime now = LocalDateTime.now();
System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));

输出
2021/04/24 21:47:11

其他

数据库中的时间类

  • java.sql.Date类
  • java.sql.Time类
  • java.sql.Timestamp类

他们都继承自java.util.Date。
他们对java.util.Date类进行了包装

  • java.sql.Date日期格式为:年月日[只存储日期数据不存储秒、分、小时数据,是专门针对sql设计]
  • java.sql.Time日期格式为:时分秒
  • java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)
最后修改:2021 年 04 月 24 日
如果觉得我的文章对你有用,请随意赞赏