由浅到深认识Java语言(24):Date类

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(23):System类

36.Date类

定义:

Date 类表示特定的瞬间,精确到毫秒;

时间是一个有距离的长度,长度的起始是 1970 年 1 月 1 日 8 点 0 分 0 秒,这个时间是 C 语言的生日, Java 是 C 语言写的,因此 java 中的时间就是从这个时间开始计算的;

Date构造器

构造方法摘要
Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(int year, int month, int date) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date) 或 GregorianCalendar(year + 1900, month, date) 取代。
Date(int year, int month, int date, int hrs, int min) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min) 取代。
Date(int year, int month, int date, int hrs, int min, int sec) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代。
Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
Date(String s) 已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。

Date方法

返回类型方法解释
booleanafter(Date when) 测试此日期是否在指定日期之后。
booleanbefore(Date when) 测试此日期是否在指定日期之前。
Objectclone() 返回此对象的副本。
intcompareTo(Date anotherDate) 比较两个日期的顺序。
booleanequals(Object obj) 比较两个日期的相等性。
intgetDate() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。
intgetDay() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。
intgetHours() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。
intgetMinutes() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。
intgetMonth() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。
intgetSeconds() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。
longgetTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
intgetTimezoneOffset() 已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 \* 1000) 取代。
intgetYear() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
inthashCode() 返回此对象的哈希码值。
static longparse(String s) 已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。
voidsetDate(int date) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。
voidsetHours(int hours) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。
voidsetMinutes(int minutes) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE, int minutes) 取代。
voidsetMonth(int month) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH, int month) 取代。
voidsetSeconds(int seconds) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND, int seconds) 取代。
voidsetTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
voidsetYear(int year) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.YEAR, year + 1900) 取代。
StringtoGMTString() 已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代,使用 GMT TimeZone。
StringtoLocaleString() 已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。
StringtoString() 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
static longUTC(int year, int month, int date, int hrs, int min, int sec) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代,使用 UTC TimeZone,后跟 Calendar.getTime().getTime()。

Date常用方法

after(Date when)/before(Date when) 测试此日期是否在指定日期之前/后:

package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Date d1 = new Date(0);
		Date d2 = new Date(1);
		boolean after = d1.after(d2);
		System.out.println(after);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

package top.sharehome.Bag;

import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Date d = new Date();
		long time = d.getTime();
		System.out.println(time);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SimpleDateFormat类

定义:

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 ==> 文本)、解析(文本 ==> 日期)和规范化。

格式化标准表格:

字母日期或时间元素表示示例
GEra 标志符TextAD
y年Year1996; 96
M年中的月份MonthJuly; Jul; 07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday; Tue
aAm/pm 标记TextPM
H一天中的小时数(0-23)Number0
k一天中的小时数(1-24)Number24
Kam/pm 中的小时数(0-11)Number0
ham/pm 中的小时数(1-12)Number12
m小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
z时区General time zonePacific Standard Time; PST; GMT-08:00
Z时区RFC 822 time zone-0800

格式化示例表格:

日期和时间模式结果
"yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"Wed, Jul 4, '01
"h:mm a"12:08 PM
"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time
"K:mm a, z"0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700

格式化示例如下: SimpleDateFormat.format() 方法

将当前时刻的 long 型转换成 String 型,以便大家能看懂;

package top.sharehome.Bag;

import java.text.SimpleDateFormat;
import java.util.*;

public class Demo {
	public static void main(String[] args) {
		Date d = new Date();
		System.out.println(d);
		//创建了一个带指定模式的 SimpleDateFormat 对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
		//使用对象格式化时间
		String format = sdf.format(d);
		System.out.println(format);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解析示例如下:

从键盘输入一个日期,解析成 Date 对象;

package top.sharehome.Bag;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Demo {
	public static void main(String[] args) throws ParseException { //抛出异常后面会有
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入xxxx年xx月xx日xx:xx:xx这样格式的时间:");
		String str = sc.next();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
		Date d0 = new Date(0);
		Date d = new Date();
		d = sdf.parse(str);
		System.out.println(d);
		System.out.println(d.getTime());
		System.out.println("1970年1月1日08:00:00的时间是:");
		System.out.println(d0);
		System.out.println(d0.getTime());
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常用构造器

常用构造方法摘要
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

常用方法

format(Date date, StringBuffer toAppendTo, FieldPosition pos) 将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer;

package top.sharehome.Bag;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
	public static void main(String[] args) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd  HH:mm:ss");
		Date d = new Date(0);
		String format = sdf.format(d);
		System.out.println(format);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

parse(String text, ParsePosition pos) 解析字符串的文本,生成 Date;

package top.sharehome.Bag;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
	public static void main(String[] args) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd  HH:mm:ss");
		String str = "1970.01.01  08:00:00";
		Date parse = sdf.parse(str);
		System.out.println(parse);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Calendar类

定义:

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

如何获得一个 Calendar 对象:

因为 Calendar 对象受保护,可以通过继承来获得一个 Calendar 对象:

package top.sharehome.Bag;

import java.util.Calendar;
import java.util.Date;

public class Demo {
	public static void main(String[] args) {
		Calendar c = new A();
	}
}
class A extends Calendar{

	@Override
	protected void computeTime() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void computeFields() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void add(int field, int amount) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void roll(int field, boolean up) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public int getMinimum(int field) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getMaximum(int field) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getGreatestMinimum(int field) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getLeastMaximum(int field) {
		// TODO Auto-generated method stub
		return 0;
	}
}

显然,这并不是一个好的方法;

查文档发现 Calendar 类中含有一些静态的方法,例如 Calendar.getInstance() ,即可以直接通过调用该方法获取一个 Calendar 对象:

package top.sharehome.Bag;

import java.util.Calendar;

public class Demo {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
	}
}

查文档又发现 Calendar 对象中包含着一个可以被操作的 Date 对象,可以通过 getTime() 来获取该 Date 对象:

package top.sharehome.Bag;

import java.util.Calendar;
import java.util.Date;

public class Demo {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		Date time = c.getTime();
	}
}

Calendar字段

字段摘要
static intALL_STYLES 指示所有风格名称的 getDisplayNames 的风格说明符,比如 “January” 和 “Jan”。
static intAM 指示从午夜到中午之前这段时间的 AM_PM 字段值。
static intAM_PM get 和 set 的字段数字,指示 HOUR 是在中午之前还是在中午之后。
static intAPRIL 指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH 字段值。
protected booleanareFieldsSet 如果 fields[] 与当前的设置时间同步,则返回 true。
static intAUGUST 指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH 字段值。
static intDATE get 和 set 的字段数字,指示一个月中的某天。
static intDAY_OF_MONTH get 和 set 的字段数字,指示一个月中的某天。
static intDAY_OF_WEEK get 和 set 的字段数字,指示一个星期中的某天。
static intDAY_OF_WEEK_IN_MONTH get 和 set 的字段数字,指示当前月中的第几个星期。
static intDAY_OF_YEAR get 和 set 的字段数字,指示当前年中的天数。
static intDECEMBER 指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH 字段值。
static intDST_OFFSET get 和 set 的字段数字,以毫秒为单位指示夏令时的偏移量。
static intERA 指示年代的 get 和 set 的字段数字,比如罗马儒略历中的 AD 或 BC。
static intFEBRUARY 指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH 字段值。
static intFIELD_COUNT get 和 set 可识别的不同字段的数量。
protected int[]fields 此日历当前设置时间的日历字段值。
static intFRIDAY 指示 Friday 的 DAY_OF_WEEK 字段值。
static intHOUR get 和 set 的字段数字,指示上午或下午的小时。
static intHOUR_OF_DAY get 和 set 的字段数字,指示一天中的小时。
protected boolean[]isSet 通知是否设置了该日历某一指定日历字段的标志。
protected booleanisTimeSet 如果 time 值是一个有效值,则返回 true。
static intJANUARY 指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH 字段值。
static intJULY 指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH 字段值。
static intJUNE 指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH 字段值。
static intLONG 指示长名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 “January”。
static intMARCH 指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH 字段值。
static intMAY 指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH 字段值。
static intMILLISECOND get 和 set 的字段数字,指示一秒中的毫秒。
static intMINUTE get 和 set 的字段数字,指示一小时中的分钟。
static intMONDAY 指示 Monday 的 DAY_OF_WEEK 字段值。
static intMONTH 指示月份的 get 和 set 的字段数字。
static intNOVEMBER 指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH 字段值。
static intOCTOBER 指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH 字段值。
static intPM 指示从中午到午夜之前这段时间的 AM_PM字段值。
static intSATURDAY 指示 Saturday 的 DAY_OF_WEEK 字段值。
static intSECOND get 和 set 的字段数字,指示一分钟中的秒。
static intSEPTEMBER 指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH 字段值。
static intSHORT 指示短名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 “Jan”。
static intSUNDAY 指示 Sunday 的 DAY_OF_WEEK 字段值。
static intTHURSDAY 指示 Thursday 的 DAY_OF_WEEK 字段值。
protected longtime 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。
static intTUESDAY 指示 Tuesday 的 DAY_OF_WEEK 字段值。
static intUNDECIMBER 指示一年中第十三个月的 MONTH 字段值。
static intWEDNESDAY 指示 Wednesday 的 DAY_OF_WEEK 字段值。
static intWEEK_OF_MONTH get 和 set 的字段数字,指示当前月中的星期数。
static intWEEK_OF_YEAR get 和 set 的字段数字,指示当前年中的星期数。
static intYEAR 指示年的 get 和 set 的字段数字。
static intZONE_OFFSET] get 和 set 的字段数字,以毫秒为单位指示距 GMT 的大致偏移量。

常用方法

add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量;

package top.sharehome.Bag;

import java.util.Calendar;
import java.util.Date;

public class Demo {
	public static void main(String[] args) {
		Date d = new Date();
		System.out.println("现在时间是"+d);
		Calendar c = Calendar.getInstance();
		c.add(Calendar.DAY_OF_MONTH, -10);
		c.add(Calendar.MONTH, 2);
		System.out.println("我在今天的基础上减了十天后再往后推了2个月!");
		Date time = c.getTime();
		System.out.println(time);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

set() 给日历设定数值;

方法的重载
voidset(int field, int value) 将给定的日历字段设置为给定值。
voidset(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
voidset(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
voidset(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
//不只是上面这样的代入方式,还可以是单个指明参数
package top.sharehome.Bag;

import java.util.Calendar;
import java.util.Date;

public class Demo {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR,2012);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.DATE, 1);
		c.set(Calendar.HOUR_OF_DAY, 8);
		c.set(Calendar.MINUTE, 23);
		c.set(Calendar.SECOND, 12);
		Date time = c.getTime();
		System.out.println(time);
	}
}

MOUTH的值是从 0 算起的,即 0 ~ 11 代表着十二个月

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例如下:

我们想要获得一个 2018 年 7 月 7 日的 Date 数据;

方法一:解析;

package top.sharehome.Bag;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
	public static void main(String[] args) throws ParseException {
		String str = "2018年7月7日";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
		Date parse = sdf.parse(str);
		System.out.println(parse);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法二:Calendar 类;

package top.sharehome.Bag;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Demo {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		c.set(2018,6,7,0,0,0);
		Date time = c.getTime();
		System.out.println(time);	
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LocalDate本地日期

  • 获取该类的对象,静态方法
    • static LocalDate now() 获取LocalDate的对象,跟随操作系统
    • static LocalDate of() 获取LocalDate的对象,自己设置日期
      • of方法中传递年月日 of(int year,int month,int day)
/**
* LocalDate的静态方法获取对象
*/
public static void getInstance(){
    //静态方法now()
    LocalDate localDate = LocalDate.now();
    System.out.println("localDate = " + localDate);

    //静态方法of()设置日期
    LocalDate of =  LocalDate.of(2022,5,10);
    System.out.println("of = " + of);
}
  • 获取日期字段的方法 : 名字是get开头
    • int getYear() 获取年份
    • int getDayOfMonth()返回月中的天数
    • int getMonthValue() 返回月份
/**
* LocalDate类的方法 getXXX()获取日期字段
*/
public static void get(){
    LocalDate localDate = LocalDate.now();
    //获取年份
    int year = localDate.getYear();
    //获取月份
    int monthValue = localDate.getMonthValue();
    //获取天数
    int dayOfMonth = localDate.getDayOfMonth();
    System.out.println("year = " + year);
    System.out.println("monthValue = " + monthValue);
    System.out.println("dayOfMonth = " + dayOfMonth);
}
  • 设置日期字段的方法 : 名字是with开头

    • LocalDate withYear(int year)设置年份

    • LocalDate withMonth(int month)设置月份

    • LocalDate withDayOfMonth(int day)设置月中的天数

    • LocalDate对象是不可比对象,设置方法with开头,返回新的LocalDate对象

/**
     * LocalDate类的方法 withXXX()设置日期字段
     */
public static void with(){
    LocalDate localDate = LocalDate.now();
    System.out.println("localDate = " + localDate);
    //设置年,月,日
    //方法调用链
    LocalDate newLocal = localDate.withYear(2025).withMonth(10).withDayOfMonth(25);
    System.out.println("newLocal = " + newLocal);
}
  • 设置日期字段的偏移量, 方法名plus开头,向后偏移
  • 设置日期字段的偏移量, 方法名minus开头,向前偏移
 /**
     * LocalDate类的方法 minusXXX()设置日期字段的偏移量,向前
     */
    public static void minus() {
        LocalDate localDate = LocalDate.now();
        //月份偏移10个月
        LocalDate minusMonths = localDate.minusMonths(10);
        System.out.println("minusMonths = " + minusMonths);
    }
    /**
     * LocalDate类的方法 plusXXX()设置日期字段的偏移量,向后
     */
    public static void plus(){
        LocalDate localDate = LocalDate.now();
        //月份偏移10个月
        LocalDate plusMonths = localDate.plusMonths(10);
        System.out.println("plusMonths = " + plusMonths);
    }

Period和Duration类

Period计算日期之间的偏差
  • static Period between(LocalDate d1,LocalDate d2)计算两个日期之间的差值.
    • 计算出两个日期相差的天数,月数,年数
public static void between(){
    //获取2个对象,LocalDate
    LocalDate d1 = LocalDate.now(); // 2021-4-13
    LocalDate d2 = LocalDate.of(2022,4,13); // 2022-6-15
    //Period静态方法计算
    Period period = Period.between(d1, d2);
    //period非静态方法,获取计算的结果
    int years = period.getYears();
    System.out.println("相差的年:"+years);
    int months = period.getMonths();
    System.out.println("相差的月:"+months);
    int days = period.getDays();
    System.out.println("相差的天:"+days);
}
Duration计算时间之间的偏差
  • static Period between(Temporal d1,Temporal d2)计算两个日期之间的差值.
 public static void between(){
        LocalDateTime d1 = LocalDateTime.now();
        LocalDateTime d2 = LocalDateTime.of(2021,5,13,15,32,20);
       // Duration静态方法进行计算对比
        Duration duration = Duration.between(d1, d2);
        // Duration类的对象,获取计算的结果
        long minutes = duration.toMinutes();
        System.out.println("相差分钟:" + minutes);

        long days = duration.toDays();
        System.out.println("相差天数:"+days);

        long millis = duration.toMillis();
        System.out.println("相差秒:" + millis);

        long hours = duration.toHours();
        System.out.println("相差小时:"+hours);
    }
DateTimeFormatter

JDK8中的日期格式化对象 : java.time.format包

  • static DateTimeFormatter ofPattern(String str)自定义的格式
  • String format(TemporalAccessor t)日期或者时间的格式化
  • TemporalAccessor parse(String s)字符串解析为日期对象
/**
* 方法parse,字符串转日期
*/
public static void parse(){
    //静态方法,传递日期格式,返回本类的对象
    DateTimeFormatter dateTimeFormatter =
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String str = "2021-04-13 15:55:55";
    //dateTimeFormatter调用方法parse转换
    //返回接口类型,接口是LocalDate,LocalDateTime 都实现了该接口
    TemporalAccessor temporalAccessor = dateTimeFormatter.parse(str);
    //System.out.println(temporalAccessor);
    LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
    System.out.println(localDateTime);
}

/**
* 方法format格式化
*
*/
public static void format(){
    //静态方法,传递日期格式,返回本类的对象
    DateTimeFormatter dateTimeFormatter =
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    //dateTimeFormatter对象调用方法format
    String format = dateTimeFormatter.format(LocalDateTime.now());
    System.out.println(format);
}

下一章:由浅到深认识Java语言(25):正则表达式