0%

Java(17)Date类和DateFormat类

Date类

java.util.Date:表示日期和时间的类

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

毫秒:千分之一秒 1000毫秒=1秒

2088-08-08 09:55:33:333 瞬间

2088-08-08 09:55:33:334 瞬间

毫秒值的作用:可以对时间和日期进行计算

2099-01-03 到 2088-01-01 中间一共有多少天

可以把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期

把日期转换为毫秒

当前的日期:2088-01-01

时间原点(0毫秒的时间):1970 年 1 月 1 日 00:00:00(英国格林威治)

就是计算当前日期到时间原点之间一共经历了多少毫秒(1639553506741L)

注意:

  • 中国属于东八区,会把时间增加8个小时

  • 1970 年 1 月 1 日 08:00:00

把毫秒转换为日期

  • 1 天 = 24 × 60 × 60 = 86400 秒。 = 86400 x 1000 = 86400 000 毫秒
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.tipdm.Demo02;

/**
* java.util.Date:表示日期和时间的类
* 类 Date 表示特定的瞬间,精确到毫秒。
* 毫秒:千分之一秒 1000毫秒=1秒
* 2088-08-08 09:55:33:333 瞬间
* 2088-08-08 09:55:33:334 瞬间
* ...
* 毫秒值的作用:可以对时间和日期进行计算
* 2099-01-03 到 2088-01-01 中间一共有多少天
* 可以把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期
*
* 把日期转换为毫秒
* 当前的日期:2088-01-01
* 时间原点(0毫秒的时间):1970 年 1 月 1 日 00:00:00(英国格林威治)
* 就是计算当前日期到时间原点之间一共经历了多少毫秒(1639553506741L)
* 注意:
* 中国属于东八区,会把时间增加8个小时
* 1970 年 1 月 1 日 08:00:00
*
* 把毫秒转换为日期
* 1 天 = 24 × 60 × 60 = 86400 秒。 = 86400 x 1000 = 86400 000 毫秒
*/

public class demo1Date {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis()); // 获取当前系统时间一共到1970 年 1 月 1 日 00:00:00 经历了多少毫秒

}
}
1
2
3
1686478732863

进程已结束,退出代码0

Date构造方法

  1. Date() 获取当前系统的日期和时间
  2. Date(long date):传递毫秒值,把毫秒值转换为Date日期
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.tipdm.Demo02;

import java.util.Date;

public class demo2Date {
public static void main(String[] args) {
demo01();
System.out.println("=============");
demo02();
System.out.println("=============");
}

/**
* Date类的带参数构造方法
* Date(long date):传递毫秒值,把毫秒值转换为Date日期
*/
private static void demo02() {
Date date = new Date(0L);
System.out.println(date); // Thu Jan 01 08:00:00 CST 1970

date = new Date(1639553506741L);
System.out.println(date); // Thu Jan 01 08:00:00 CST 1970
}

/**
* Date类的空参数构造方法
* Date() 获取当前系统的日期和时间
*/
private static void demo01() {
Date date = new Date();
System.out.println(date); // Wed Dec 15 15:37:49 CST 2021
}
}
1
2
3
4
5
6
Sun Jun 11 18:19:20 CST 2023
=============
Thu Jan 01 08:00:00 CST 1970
Wed Dec 15 15:31:46 CST 2021

进程已结束,退出代码0

long getTime() 把日期转换为毫秒值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.tipdm.Demo02;

import java.util.Date;

public class demo2Date {
public static void main(String[] args) {
demo03();

}

/**
* long getTime() 把日期转换为毫秒值
* 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
*/
private static void demo03() {
Date date = new Date();
long time = date.getTime();
System.out.println(time); // Thu Jan 01 08:00:00 CST 1970
}
}
1
2
3
=============
1686478760686
=============

DateFormat类

java.text.DateFormat 是日期/时间格式化子类的抽象类

作用:

格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化

成员方法:

1
2
3
4
5
String format(Date date)   按照指定的模式,把Date日期,格式化为符合模式的字符串

Date parse(String source) 把符合模式的字符串,解析为Date日期

DateFormat 类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类

java.text.SimpleDateFormat extends DateFormat

构造方法:

1
SimpleDateFormat(String pattern)

用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

参数:

String pattern: 传递指定的模式

模式:区分大小写

简写 意义
y
M
d
H
m
s

写对应的模式,会把模式替换为对应的日期和时间

“yyyy-MM-dd HH:mm:ss” —> “2021-12-15 15:54:30”

注意:

模式中的字母不能更改,连接模式的符号可以改变

“yyyy年MM月dd日 HH时mm分ss秒” —> “2021年12月15日 15时54分30秒”

String format(Date date)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.tipdm.Demo02;

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

/**
* java.text.DateFormat 是日期/时间格式化子类的抽象类
* 作用:
* 格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化
* 成员方法:
* String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
* Date parse(String source) 把符合模式的字符串,解析为Date日期
* DateFormat 类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类
*
* java.text.SimpleDateFormat extends DateFormat
* 构造方法:
* SimpleDateFormat(String pattern)
* 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
* 参数:
* String pattern: 传递指定的模式
* 模式:区分大小写
* y 年
* M 月
* d 日
* H 时
* m 分
* s 秒
* 写对应的模式,会把模式替换为对应的日期和时间
* “yyyy-MM-dd HH:mm:ss” --> "2021-12-15 15:54:30"
* 注意:
* 模式中的字母不能更改,连接模式的符号可以改变
* “yyyy年MM月dd日 HH时mm分ss秒” --> "2021年12月15日 15时54分30秒"
*/
public class demo3DateFormat {
public static void main(String[] args) throws ParseException {
demo01();
}


/**
* 使用DateFormat类中的方法format,把日期格式化为文本
* 使用步骤:
* 1. 创建SimpleDateFormat对象,构造方法中传递指定的模式
* 2. 调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
*/
private static void demo01() {
// 1. 创建SimpleDateFormat 对象,构造方法中传递指定的模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 'at' HH时mm分ss秒");
// 2. 调用SimpleDateFormat 对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
// String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
Date date = new Date();
String d = sdf.format(date);
System.out.println(d);
}
}
1
2
3
20230611at 182203

进程已结束,退出代码0

Date parse(String source)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.tipdm.Demo02;

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

/**
* java.text.DateFormat 是日期/时间格式化子类的抽象类
* 作用:
* 格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化
* 成员方法:
* String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
* Date parse(String source) 把符合模式的字符串,解析为Date日期
* DateFormat 类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类
*
* java.text.SimpleDateFormat extends DateFormat
* 构造方法:
* SimpleDateFormat(String pattern)
* 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
* 参数:
* String pattern: 传递指定的模式
* 模式:区分大小写
* y 年
* M 月
* d 日
* H 时
* m 分
* s 秒
* 写对应的模式,会把模式替换为对应的日期和时间
* “yyyy-MM-dd HH:mm:ss” --> "2021-12-15 15:54:30"
* 注意:
* 模式中的字母不能更改,连接模式的符号可以改变
* “yyyy年MM月dd日 HH时mm分ss秒” --> "2021年12月15日 15时54分30秒"
*/
public class demo3DateFormat {
public static void main(String[] args) throws ParseException {
demo02();
}

/**
* 使用DateFormat类中的方法parse,把文本解析为日期
* 使用步骤:
* 1. 创建SimplelDateFormat对象,构造方法中传递的模式
* 2. 调用SimplelDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为Date日期
* 注意:
* public Date parse(String source) throws parseException
* parse方法声明了一个异常叫parseException
* 如果字符串和构造方法的模式不一样,那么程序就会抛出异常
* 调用一个抛出了异常的方法,就必须的处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理
*/
private static void demo02() throws ParseException {
// 1. 创建SimpleDateFormat 对象,构造方法中传递指定的模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 'at' HH时mm分ss秒");
// 2. 调用SimplelDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为Date日期
Date date = sdf.parse("2021年12月15日 at 16时01分18秒");
System.out.println(date); // Wed Dec 15 16:01:18 CST 2021
System.out.println(date.getTime()); // 1639555278000

// Date date1 = sdf.parse("2021年12月15日 at 16时01分18"); // ParseException 抛出解析异常
// System.out.println(date1);
}
}
1
2
3
4
Wed Dec 15 16:01:18 CST 2021
1639555278000

进程已结束,退出代码0

练习:请使用日期时间相关的API,计算出一个人已经出生了多少天。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.tipdm.Demo02;

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

/**
* 练习:
* 请使用日期时间相关的API,计算出一个人已经出生了多少天。
* 分析:
* 1. 使用Scanner类中的方法next,获取出生日期
* 2. 使用DateFormat类中的方法parse,把字符串的出生日期,解析为Date格式的出生日期
* 3. 把Date格式的出生日期转换为毫秒值
* 4. 获取当前的日期,转换为毫秒值
* 5. 使用当前日期的毫秒值-出生日期的毫秒值
* 6. 把毫秒值转换为天
*/
public class demo4Test {
public static void main(String[] args) throws ParseException {
// 获取用户输入出生日期
System.out.print("请输入出生日期(格式:yyyy-MM-dd)")
Scanner sc = new Scanner(System.in);
String Birthday = sc.next();
// 设置时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 输入的String格式的日期转化为标准Date格式
Date date = sdf.parse(Birthday);
// 将日期转化为毫秒
long birthMS = date.getTime();

// 获取系统当前日期
Date now = new Date();
// 将当前日期转化为毫秒
long nowMS = now.getTime();

// 计算当前日期与出生日期的毫秒查
long deltaMS = nowMS - birthMS;
// 将毫秒转化为天
int deltaDays = deltaMS / 86400000;
System.out.println("距离您出生已经:" + deltaDays + "天了");
}
}
1
2
3
4
请输入出生日期(格式:yyyy-MM-dd)1996-6-28
距离您出生已经:9844天了

进程已结束,退出代码0
-------------本文结束感谢您的阅读-------------