由浅到深认识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
yYear1996; 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 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 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 getset 的字段数字,指示 HOUR 是在中午之前还是在中午之后。
static intAPRIL 指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH 字段值。
protected booleanareFieldsSet 如果 fields[] 与当前的设置时间同步,则返回 true。
static intAUGUST 指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH 字段值。
static intDATE getset 的字段数字,指示一个月中的某天。
static intDAY_OF_MONTH getset 的字段数字,指示一个月中的某天。
static intDAY_OF_WEEK getset 的字段数字,指示一个星期中的某天。
static intDAY_OF_WEEK_IN_MONTH getset 的字段数字,指示当前月中的第几个星期。
static intDAY_OF_YEAR getset 的字段数字,指示当前年中的天数。
static intDECEMBER 指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH 字段值。
static intDST_OFFSET getset 的字段数字,以毫秒为单位指示夏令时的偏移量。
static intERA 指示年代的 getset 的字段数字,比如罗马儒略历中的 AD 或 BC。
static intFEBRUARY 指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH 字段值。
static intFIELD_COUNT getset 可识别的不同字段的数量。
protected int[]fields 此日历当前设置时间的日历字段值。
static intFRIDAY 指示 Friday 的 DAY_OF_WEEK 字段值。
static intHOUR getset 的字段数字,指示上午或下午的小时。
static intHOUR_OF_DAY getset 的字段数字,指示一天中的小时。
protected boolean[]isSet 通知是否设置了该日历某一指定日历字段的标志。
protected booleanisTimeSet 如果 time 值是一个有效值,则返回 true。
static intJANUARY 指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH 字段值。
static intJULY 指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH 字段值。
static intJUNE 指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH 字段值。
static intLONG 指示长名称的 getDisplayNamegetDisplayNames 的风格说明符,比如 “January”。
static intMARCH 指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH 字段值。
static intMAY 指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH 字段值。
static intMILLISECOND getset 的字段数字,指示一秒中的毫秒。
static intMINUTE getset 的字段数字,指示一小时中的分钟。
static intMONDAY 指示 Monday 的 DAY_OF_WEEK 字段值。
static intMONTH 指示月份的 getset 的字段数字。
static intNOVEMBER 指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH 字段值。
static intOCTOBER 指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH 字段值。
static intPM 指示从中午到午夜之前这段时间的 AM_PM字段值。
static intSATURDAY 指示 Saturday 的 DAY_OF_WEEK 字段值。
static intSECOND getset 的字段数字,指示一分钟中的秒。
static intSEPTEMBER 指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH 字段值。
static intSHORT 指示短名称的 getDisplayNamegetDisplayNames 的风格说明符,比如 “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 getset 的字段数字,指示当前月中的星期数。
static intWEEK_OF_YEAR getset 的字段数字,指示当前年中的星期数。
static intYEAR 指示年的 getset 的字段数字。
static intZONE_OFFSET] getset 的字段数字,以毫秒为单位指示距 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) 设置日历字段 YEARMONTHDAY_OF_MONTH 的值。
voidset(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE 的值。
voidset(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEARMONTHDAY_OF_MONTHHOURMINUTESECOND 的值。
//不只是上面这样的代入方式,还可以是单个指明参数
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):正则表达式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/486188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Zotero 配置教程Windonws与Linux

Zotero的安装 zotero 官网: Zotero | Your personal research assistant 官方文档 :start [Zotero Documentation] 推荐常用的插件 1、 茉莉花:https://github.com/l0o0/jasminum 2、 Doi管理:https://github.com/bwiernik/zo…

web表单标签与练习(3.18)

一、表单域 表单域是一个包含表单元素的区域。 在HTML标签中&#xff0c;< form >标签用于定义表单域&#xff0c;以实现用户信息和传递。 < form >会把它范围内的表单元素信息提交给服务器。 表单属性 action url地址 用于指定接收并处理表单数据的服务器程序的…

SpringBoot ---HTML转PDF工具

之前项目用的WKHtmlToPdf&#xff0c;速度较慢&#xff0c;现在需要改成基于ITEXT java使用itext7实现html转pdf_java使用itext7实现html转pdf全代码完整示例 cainiaobulan-CSDN博客文章浏览阅读2.7k次。使用itext7html转pdf_java使用itext7实现html转pdf全代码完整示例 caini…

HTML 常用标签总结

本篇文章总结了一些我在学习html时所记录的标签&#xff0c;虽然总结并不是非常全面&#xff0c;但都是一些比较常用的。 html元素标签 首先一个html界面是由无数个元素标签组成的&#xff0c;每个元素具有它的属性 1.input 单行文本框 标签type属性——text <input ty…

第四十五周:文献阅读

目录 摘要 Abstract 文献阅读&#xff1a;基于注意力的双向LSTM和编码器-解码器的水质预测 现有问题 提出方法 创新点 方法论 1、EMD&#xff08;经验模态分解&#xff09; 2、VMD&#xff08;变分模态分解&#xff09; 3、VBAED模型 研究实验 数据集 数据预处理 …

此站点的连接不安全,怎么解决?

有部分的网站用户在打开的时候会被提示“此站点的连接不安全”这种现象为什么会出现&#xff0c;大概率是因为没有安装SSL证书或者SSL证书出现了错误&#xff0c;小编在这里面将展开讲解为大家分析其中的原因以及解决方法。 一&#xff1a;遇到该情况的时候该怎么办&#xff1…

【基于HTML5的网页设计及应用】——随机验证码

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

2024/3/24--爬虫库

1.常用的爬虫库 (1)在setting的project里面点击Python Interpreter (2&#xff09;常用的爬虫库有 import requests //用途&#xff1a;用于发送HTTP请求。from bs4 import BeautifulSoup //用于从HTML或XML文档中提取数据。import scrapy //一个功能强大的爬虫框架&#xf…

TypeScript基础类型

string、number、bolean 直接在变量后面添加即可。 let myName: string Tomfunction sayHello(person: string) {return hello, person } let user Tom let array [1, 2, 3] console.log(sayHello(user))function greet(person: string, date: Date): string {console.lo…

R语言迅速计算多基因评分(PRS)

Polygenic Risk Scores in R 最朴素的理解PRS&#xff1a; GWAS分析结果中&#xff0c;有每个SNP的beta值、se值、P值&#xff0c;因为GWAS分析中将SNP变为0-1-2编码&#xff0c;所以这些显著的SNP的beta值&#xff0c;就可以用于预测。 比如&#xff1a;GWAS分析中&#xf…

【C语言】结构体与位段

一、前言 我们之前学习过定义一个整型类型的变量又或者定义一个浮点型类型的变量...&#xff0c;这些变量可以描述一个整数又或者描述一个小数...&#xff0c;可无论是整数还是小数...&#xff0c;它们也只是简单对象。如果我们想要描述像一本书&#xff0c;一个人这种复杂对象…

在国企做软件测试工程师是一种什么样的体验:每天过的像打仗一样

工作越来越卷&#xff0c;下班越来越晚。每到本该下班的时间&#xff0c;总有一批双目无神的打工人坐在工位上&#xff0c;生无可恋地继续加班...... 如今的职场&#xff0c;加班似乎已成为一种普遍化的现象。有人说&#xff1a;在高薪的背后&#xff0c;都是一群玩命工作的身影…

H3C技术大全复现之高级路由交换技术 1

华子目录 VLAN 基本技术VLANIEEE 802.1Q交换机端口类型MVRP协议实验测试 VLAN扩展技术Super VLAN产生背景Super vlan&#xff08;相当于vlanif接口&#xff0c;也属于虚拟接口&#xff0c;可以充当网关&#xff09;Sub vlan&#xff08;普通vlan&#xff09;关于代理ARP普通代理…

芒果YOLOv8改进:提升篇:从零开始训练 YOLOv8最新稳定8.1版本教程说明,适用Mac、Windows、Linux端

从零开始训练 YOLOv8 - 最新8.1版本教程说明 本文适用Windows/Linux/Mac&#xff1a;从零开始使用Windows/Linux/Mac训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法第一步 配置环境1.1 系列配置1.2 代码…

火星文:一种特殊的文字编码

title: 火星文&#xff1a;一种特殊的文字编码 date: 2024/3/25 13:26:20 updated: 2024/3/25 13:26:20 tags: 火星文文字变种网络流行解码阅读社交趣味艺术创新未来符号 定义 火星文是一种特殊的文字编码&#xff0c;也称为奇文&#xff0c;其特点是将常见的文字进行特殊的变…

Linux收到一个网络包是怎么处理的?

目录 摘要 ​编辑 1 从网卡开始 2 硬中断&#xff0c;有点短 2.1 Game Over 3 接力——软中断 3.1 NET_RX_SOFTIRQ 软中断的开始 3.2 数据包到了协议栈 3.3 网络层处理 3.4 传输层处理 4 应用层的处理 5 总结 摘要 一个网络包的接收始于网卡&#xff0c;经层层协议栈…

苍穹外卖项目笔记

软件开发流程 需求分析&#xff1a;说明书和原型 设计&#xff1a;UI&#xff0c;数据库&#xff0c;接口设计 编码&#xff1a;项目代码&#xff0c;单元测试 测试&#xff1a;测试用例&#xff0c;测试报告 上线运维&#xff1a;软件环境安装&#xff0c;配置 软件环境…

ClickHouse03-小白如何快速搭建ClickHouse集群

普通测试通常使用ClickHouse单节点就可以了&#xff0c;但是生产环境不免需要考虑多活、负载等高可用问题&#xff0c;集群就成了基础需求 ClickHouse在集群的选择上&#xff0c;作者已知的有两种&#xff1a; 使用ZooKeeper作为节点协调的组件&#xff0c;使用ClickHouse-Kee…

Java实现JDBC编程

1 数据库编程的必备条件 编程语言&#xff0c;如Java&#xff0c;C、C、Python等 数据库&#xff0c;如Oracle&#xff0c;MySQL&#xff0c;SQL Server等 数据库驱动包&#xff1a;不同的数据库&#xff0c;对应不同的编程语言提供了不同的数据库驱动包&#xff0c;如&#x…

day44 动态规划part6

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…