日期类

date类

在java.util和java.sql包下都有Date类,在这里我们学习的是java.util.Date

Date代表了一个特定的时间,精确到毫秒

构造方法

方法名 说明
Date() 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
Date(long date) 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
1
2
3
4
5
6
7
8
9
10
public class Test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);//输出Wed Jul 27 13:01:47 CST 2022,这里重写了Date类的toString方法

long datel = 1000*60*60;
Date date2 = new Date(datel);
System.out.println(date2);//输出Thu Jan 01 09:00:00 CST 1970, 因中国时区时东8区,所以是9点
}
}

Date类常用方法

方法名 说明
long getTime() 获取的是日期对象从1970年1月1日到现在的毫秒值
void setTime(long time) 设置时间,参数为毫秒值
1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime());//1658898667736

date.setTime(1000*60*60);
System.out.println(date);//Thu Jan 01 09:00:00 CST 1970
}
}

SimpleDateFormat类 概述

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化解析和日期。我们重点学习日期的格式化和解析

日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从’A’到’Z’以及从’a’到’z’引号的字母被解释为表示日期或时间字符串的组件的模式字母

format英文释义:格式化

注:其实SimpleDateForma类实例化的对象,基本上是存了一个模式,例XXXX年XX月XX日 xx:xx:xx这种的格式。调用方法传参(Date对象或String对象进去)就可以实现以SimpleDateForma模式为格式的转换(格式化和解析)

常用的模式字母及对应关系如下

模式字母 对应关系
y
M
d
H
m
s

构造方法

方法名 说明
SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式
SimpleDateFormat(String patten) 构造一个SimpleDateFormat,使用给定的模式和默认的日期格式

SimpleDateFormat 格式化和解析

  1. 格式化(从Date到String)

    final String format(Date date):将日期格式化成日期、时间字符串

1
2
3
4
5
6
7
8
9
10
11
12
+import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
public static void main(String[] args) {
Date d = new Date();
//以yyyy年MM月dd日 HH:mm:ss格式构造
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);//输出以SimpleDateFormat模式为格式的当前时间
}
}

  1. 解析(从String到Date)

    Date parse(String source):从给定的字符串开始解析文本以生成日期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test2 {
public static void main(String[] args) throws ParseException {
String s = "2001-06-16 10:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
//以SimpleDateFormat的模式为格式接受s,并对其解析,返回Date类的对象
date = sdf.parse(s);
System.out.println(date);//输出Sat Jun 16 10:00:00 CST 2001
}
}

Calendar类

Calendar本事是一个抽象类,他本身不能利用构造方法实例化对象

Calendar提供了一个静态方法getInstance用来获取Calendar子类对象,其日历字段已使用当前日期和时间初始化,这个方法在调用实例化对象时实现的本质是多态

instance英文释义:实例

1
Calendar c = Calendar.getInstance(); //多态

Calendar常用方法

Calender的方法主要是通过get、set、add对对象里的属性进行修改和读取。

方法名 说明
int get(int field) 返回给定日历字段的值
abstarct void add(int field,int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历属性
final void set(int year,int mounth,int date) 设置当前的年月日

get方法
1
2
3
4
5
6
7
8
9
10
11
public class Test {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();

//yeah属性在Calendar类中是静态的常量,所以通过类名.属性获取该字段作为形参
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+ 1;//因为月从零开始,需要加 1
int date = cal.get(Calendar.DATE);
System.out.println(year +"年" + month + "月" + date+ "日");//2022年7月27日
}
}

ADD方法

虽然这个方法是抽象方法,但是我们在实例化对象的时候也是用了多态,所以方法在子类中肯定是会重写

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
//add方法(十年后的五天前)
cal.add(Calendar.YEAR,10);
cal.add(Calendar.DATE,-5);
//get方法
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+ 1;
int date = cal.get(Calendar.DATE);
System.out.println(year +"年" + month + "月" + date+ "日");//2032年7月22日
}
}

set方法

1
2
3
4
5
6
7
8
9
10
11
public class Test {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
//set方法
cal.set(2001,05,16);
//get方法
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+ 1;
int date = cal.get(Calendar.DATE);
System.out.println(year +"年" + month + "月" + date+ "日");//2001.06.16
}

案例

输入一个年份,求这个年的2月有多少天

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test {
public static void main(String[] args) {
//从键盘上获取一个年份
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份");
int year = scanner.nextInt();

//设置日历对象的年月日
Calendar cal = Calendar.getInstance();
cal.set(year,2,1);//设置为3月1日

//3月1日往前一天就是2月的最后一天
cal.add(Calendar.DATE,-1);

//获取这一天 输出即可
System.out.println(cal.get(Calendar.DATE));
}
}

日期类
http://blog.170827.xyz/2022/07/27/日期类/
作者
XIAOBAI
发布于
2022年7月27日
许可协议