目录
10.3.3.SimpleDateFormat如何格式化和解析
10.Date日期时间类
10.1.Date概述
Date日期工具类:
- 1.java.util.Date:表示日期和时间的类。
- 2.类 Date:表示特定的瞬间,精确到毫秒。
- 3.毫秒:千分之一秒,1000毫秒=1秒
- 4.毫秒值的作用:可以对时间和日期进行计算。比如:2099-01-03到2088-01-01中间一共有多少天?可以将日期转换为毫秒进行计算,计算完毕,把毫秒转换为日期。
- 5.把日期转换为毫秒:System.currentTimeMillis()
- 当前日期:2088-01-01
- 时间原点(0毫秒):1970-01-01-00:00:00(英国格林威治)
- 就是计算当前日期到时间原点之间一共经历了多少毫秒。
- 6.把毫秒值转化为日期 1天=24*60*60=86400秒=86400*1000=86400000毫秒
- 7.注意:中国属于东八区,会把时间增加8个小时。 则时间原点:1970-01-01-08:00:00(中国)
10.2.Date常用三个方法
Date():Date类的空参构造函数,获取当前系统的日期时间。
Date(Long date):Date类的带参数构造函数,传递毫秒值,把毫秒值转换为Date日期。
Long getTime():把日期转换为毫秒值,相当于System.currentTimeMills()方法
返回自1970年01月01日00:00:00GMT以来,此date对象表示的毫秒值
public class Date1 {
public static void main(String[] args) {
demo1();
demo2();
demo3();
}
public static void demo1(){
/*
Date类的空参构造函数,
Date()获取当前系统的日期时间。
*/
Date date=new Date();
//打印Date类对象没有输出对象地址说明在Date类中重写了toString方法。
System.out.println(date);
}
public static void demo2(){
/*
Date类的带参数构造函数
Date(Long date):传递毫秒值,把毫秒值转换为Date日期。
*/
Date date = new Date(123456789L);
System.out.println(date);
}
public static void demo3(){
/*
Long getTime():把日期转换为毫秒值,相当于System.currentTimeMills()方法
返回子1970年01月01日00:00:00GMT以来,此date对象表示的毫秒值
*/
Date date = new Date();
long time = date.getTime();
System.out.println(time);
}
}
package demo12;
import java.util.Date;
//日期和时间Date
public class DateMain {
public static void main(String[] args) {
//创建一个当前时间的Date
Date date = new Date();
System.out.println(date);
//当前时间到时间原点毫秒数
long time = date.getTime();
System.out.println(time);
//显示当前时间的前一天时间
long time2 = date.getTime() - (24 * 60 * 60 * 1000);
Date date1 = new Date(time2);//将毫秒转化成时间
System.out.println(date1);
}
}
10.3.DateFormat类
10.3.1.什么是Format
format:格式化
- 1.java.text.Format:是一个用于格式化语言环境敏感的信息(如日期消息数字)的抽象基类。
- 2.Java平台为日期、消息和数字分别提供三个特殊的Format的子类:
- : DateFormat
- : MessageFormat
- : NumberFormat
10.3.2.DateFormat作用和使用
- 1.java.text.DateFormat:是日期/时间格式化抽象类
- 2.DateFormat作用和实现方法:
- 作用:格式化(日期->文本) ,解析(文本->日期),用于格式化和解析日期字符串
- 成员方法:
- String format(Date date):按照指定模式,将Date日期,格式化为符合模式的字符串
- Date parse(String source):把符合模式的字符串,解析为Date日期。
- DateFormat类是一个抽象类,无法直接创建对象使用自身方法,
- 可以使用DateFormat类子类java.text.SimpleDateFormat extends DateFormat.该类继承了父类Format,就可以调用父类方法format方法和parse方法。
10.3.3.SimpleDateFormat如何格式化和解析
- 1.SimpleDateFormat类:
- 构造函数:SimpleDateFormat(String pattern)
- 函数参数:String pattern 表示传递的指定的模式。
- 模式:区分大小写
- y 年
- M 月
- d 日
- H 时
- m 分
- s 秒
- 根据对应的模式,会把模式转换为对应的日期和时间。
- "yyyy-MM-dd HH:mm:ss"
- "yyyy年MM月dd日 HH时mm分ss秒"
- 注意:模式中的字母不能更改,连接模式的符号可以改变。
- 构造函数:SimpleDateFormat(String pattern)
- 2.使用DateFormat类中的format方法,把日期格式按指定模式转化为文本(字符串)
- 使用步骤:
- 1:创建SimpleDateFormat对象,构造方法中传递指定的模式。
- 2:调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)。
- 3.使用DateFormat类中的parse方法,把文本解析为日期。
- 使用步骤:
- 1:创建SimpleDateFormat对象,构造方法中传递指定的模式。
- 2:调用SimpleDateFormat对象中的方法parse,把符合构造函数中模式的字符串,解析为日期
- 4.注意:
- public Date parse(String source) throws ParseException
- 在DateFormat的parse方法中声明了一个异常叫解析异常ParseException,如果字符串和构造方法的模式不一样,那么程序就会抛出异常,调用一个抛出异常的方法,就必须处理这个异常,要么throws继续抛出异常,要么try..catch自己处理。
- 5.关键代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String d = sdf.format(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2019-08-22 16:16:45");
10.4.Date类练习
题目:
请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:
- 1.获取当前时间对应的毫秒值
- 2.获取自己出生日期对应的毫秒值
- 3.两个时间相减(当前时间– 出生日期)
关键代码:
: System.out.println("请输入出生日期 格式 YYYY-MM-dd");
: String birthdayString = new Scanner(System.in).next();
: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
: Date birthdayDate = sdf.parse(birthdayString);
: Date todayDate = new Date();
: long birthdaySecond = birthdayDate.getTime();
: long todaySecond = todayDate.getTime();
: long second = todaySecond-birthdaySecond;
: System.out.println(secone/1000/60/60/24);
public static void function() throws Exception {
System.out.println("请输入出生日期 格式 YYYY-MM-dd");
// 获取出生日期,键盘输入
String birthdayString = new Scanner(System.in).next();
// 将字符串日期,转成Date对象
// 创建SimpleDateFormat对象,写日期模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 调用方法parse,字符串转成日期对象
Date birthdayDate = sdf.parse(birthdayString);
// 获取今天的日期对象
Date todayDate = new Date();
// 将两个日期转成毫秒值,Date类的方法getTime
long birthdaySecond = birthdayDate.getTime();
long todaySecond = todayDate.getTime();
long second = todaySecond-birthdaySecond;
if (second < 0){
System.out.println("还没出生呢");
} else {
System.out.println(secone/1000/60/60/24);
}