1. Date类
概述: java.util.Date
类表示时间和日期的类。 类Date表示特定的瞬间,精确到毫秒。
毫秒:千分之一秒 1000ms = 1s
毫秒值的作用: 可以对时间和日期进行计算。比如说2008/9/1 - 2019/7/13 中间一共相距多少天,按照平常的方法很难进行计算,涉及到闰年等问题,这里采用毫秒进行计算的话,可以将日期转换为毫秒进行计算,然后再把毫秒值转换为日期 。
那么如何将日期转换为毫秒呢? 在介绍之前,我们先要了解一个概念,那就是时间原点(0毫秒)
即国际上定义的标准基准时间(称为“历元(epoch)”, 1970年1月1日 00:00:00 GMT 英国格林威治
)。
这里我们的当前日期为2019/7/14,那么计算的时候就是计算当前日期到时间原点之间一共经历了多少毫秒。
小贴士:
- 注意事项:
中国属于东八区,会把时间增加8个小时
1970 年 1 月 1日 08:00:00- 把毫秒转换为日期:
1 天 = 24 * 60 * 60 = 86400 秒 = 86400 * 1000 = 86400000毫秒
查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数仍可以把毫秒值转成日期对象。
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。实际操作发现其实就是获取本地的时间 Sun Jul 14 10:45:55 CST 2019public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。 如果参数设置为0L
的话实际显示的是按照东八区来显示的标准时间 Thu Jan 01 08:00:00 CST 1970
简单来说: 使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 创建日期对象,把当前的时间
System.out.println(new Date()); // Sun Jul 14 10:45:55 CST 2019
// 创建日期对象,把当前的毫秒值转成日期对象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
tips: 在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
Date类中的多数方法已经过时,常用的方法有:
public long getTime()
把日期对象转换成对应的时间毫秒值。
import java.util.Date;
/**
* Created by Administrator on 2019/7/14.
*/
public class DemoGetTime {
public static void main(String[] args) {
demo1();
}
private static void demo1() {
Date date = new Date();
long time = date.getTime();
System.out.println(time); // 1563072355501
}
2. DateFormat类
java.text.DateFormat :
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
-
作用:
格式化:format(日期 -> 文本),解析:parse(文本 -> 日期)
格式化:按照指定的格式,从Date对象转换为String对象。
解析:按照指定的格式,从String对象转换为Date对象。 -
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类
java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。
常用的格式规则为:标识字母(区分大小写) 含义 y 年 M 月 d 日 H 时 m 分 s 秒 备注:
java.text.SimpleDateFormat extends DateFormat
更详细的格式规则,可以参考SimpleDateFormat类的API文档。创建SimpleDateFormat对象的代码如:
import java.text.DateFormat; import java.text.SimpleDateFormat; public class Demo02SimpleDateFormat { public static void main(String[] args) { // 对应的日期格式如:2018-01-16 15:06:38 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }
-
常用方法
DateFormat类的常用方法有:
public String format(Date date)
:将Date对象格式化为字符串。public Date parse(String source)
:将字符串解析为Date对象。
format方法:
使用format方法的代码为:
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; /* 把Date对象转换成String */ public class Demo03DateFormatMethod { public static void main(String[] args) { Date date = new Date(); // 创建日期格式化对象,在获取格式化对象时可以指定风格 DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); String str = df.format(date); System.out.println(str); // 2008年1月23日 } }
parse方法:
使用parse方法的代码为:
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* 把String转换成Date对象 */ public class Demo04DateFormatMethod { public static void main(String[] args) throws ParseException { DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); String str = "2018年12月11日"; Date date = df.parse(str); System.out.println(date); // Tue Dec 11 00:00:00 CST 2018 } }
小节: 使用日期时间相关的API,实现出生日期天数计算的DEMO
代码实现:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* Created by Administrator on 2019/7/14.
*/
/*
请使用日期时间相关的API,计算出一个人已经出生了多少天
思路:
1. 键盘获取用户的生日(字符串) -> Date对象(SimpleDateFormat) -> 毫秒值(getTime()方法)
2. 获取当前时间 本地时间对象 -> 毫秒值
3. 计算两者的差值 externalValue -> 正常天数(毫秒值到天 毫秒值/1000/60/60/24)
*/
public class DemoTotalBirthday {
public static void main(String[] args) throws ParseException {
// 获取用户的生日
System.out.println("请按照格式要求输入您的生日:年/月/日");
String birthdayString = new Scanner(System.in).next(); // 使用匿名函数的形式
// 将用户输入字符串转换为Date对象
DateFormat birthdayDate = new SimpleDateFormat("yyyy/MM/dd");
Date birthdayObj = birthdayDate.parse(birthdayString);
// 将Date对象转换成毫秒
long birthTime = birthdayObj.getTime();
Date localTime = new Date(); // 获取本地时间对象
long timeNow = localTime.getTime(); // 转换为毫秒值
long externalValue = timeNow - birthTime;
long liveTime = externalValue / 1000 / 60 / 60 / 24;
System.out.println("您总共活了" + liveTime + "天");
}
}