23 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 毫秒
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 经历了多少毫秒
}
}
23.1 Date构造方法
- Date() 获取当前系统的日期和时间
- Date(long date):传递毫秒值,把毫秒值转换为Date日期
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
}
}
23.2 long getTime() 把日期转换为毫秒值
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
}
}
24 DateFormat类
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秒”
24.1 String format(Date date)
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);
}
}
24.2 Date parse(String source)
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);
}
}
24.3 练习:请使用日期时间相关的API,计算出一个人已经出生了多少天。
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;
// 将毫秒转化为天
double deltaDays = deltaMS / 86400000;
System.out.println("距离您出生已经:" + deltaDays + "天了");
}
}