旧类
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日期格式为:年月日时分秒纳秒(毫微秒)