Date类
- 能够使用日期类输出当前日期
概述
java.util.Date
类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
构造方法
两种构造方法
- 空参构造:获取当前系统时间和日期
Date date = new Date(); // Thu Dec 05 21:36:16 CST 2019
// 时间戳
System.out.println(System.currentTimeMillis()); // 毫秒值
- 传递毫秒值:把毫秒值转换为Date日期
Date date = new Date(0L); //Thu Jan 01 08:00:00 CST 1970(东八区)
date = new Date(3742767540068L);
System.out.println(date);// Sun Aug 08 09:39:00 CST 2088
由于我们处于东八区,所以我们的基准时间为:1970年1月1日8时0分0秒。
理解
-
使用无参构造,可以自动获取当前系统时间的毫秒时刻
-
指定long类型的构造参数,可以自定义毫秒时刻。
-
在使用
println
方法时,会自动调用Date
类中的toString
方法。Date
类对Object
类中的toString
方法进行了覆盖重写,所以结果为指定格式的字符串。
例如:
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
System.out.println(new Date());
System.out.println(new Date(0L));
Date date = new Date(3742767540068L);
System.out.println(date);
}
}
结果:
Tue Dec 24 16:46:16 CST 2019 // new Date()
Sun Aug 08 09:39:00 CST 2088 // new Date(0L)
Thu Jan 01 08:00:00 CST 1970 // new Date(3742767540068L)
常用方法
- 把日期对象转换成对应的时间毫秒值
public long getTime()
例如:
private static void demo03() {
Date date = new Date();
long time = date.getTime();
System.out.println(time); // 1575554152316
}
毫秒值的作用
可以对时间和日期进行计算,将日期转换为毫秒便于计算,计算完成后在把毫秒转换为日期
日期转换为毫秒:就是计算当前日期到时间原点之间一共经历了多少毫秒
- 1 天 = 24 × 60 × 60 = 86400 秒 ===> 86400 x 1000 = 86400000毫秒
演示代码如下:
public class Demo01Date {
public static void main(String[] args) {
// 获取当前系统时间到1970年1月1日00.00.00经历了多少毫秒
System.out.println(System.currentTimeMillis()); // 1575640996510
timeShow();
}
/*
long getTime() 把日期转换为毫秒值
相当于System.currentTimeMillis()方法
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
*/
private static void timeShow() {
Date date = new Date();
long time = date.getTime();
System.out.println(time); // 1575554152316
}
}
结果:
1576206666470
1576206666472
DateFormat类 & SimpleDateFormat类
- 能够使用将日期格式化为字符串的方法
- 能够使用将字符串转换成日期的方法
概述
java.text.DateFormat
是日期/时间格式化子类的抽象类,这个类可以帮我们完成日期和文本之间的转换,
即可以在Date对象与String对象之间进行转换。
-
格式化:按照指定的格式,从Date对象转换为String对象(日期 --> 文本)
-
解析:按照指定的格式,从String对象转换为Date对象(文本 --> 日期)
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。
这个类需要一个模式(格式)来指定格式化或解析的标准。
- 用给定的模式和默认语言环境的日期格式符号来构造
SimpleDateFormat
.
public SimpleDateFormat(String pattern);
参数
pattern:是一个字符串,代表日期时间的自定义格式,传递指定的模式。
如 yyyy-MM-dd HH:mm:ss
:会把模式替换为对应的日期和时间
代码:
// 对应的日期格式如:2018-01-16 15:06:38
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
格式规则
格式中的字母不能更改,但是连接模式的符号可以改变 :yyyy年MM月dd日 HH时mm分ss秒
更详细的格式规则,可以参考SimpleDateFormat类的API文档
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
常用方法
格式化
public String format(Date date)
:将Date对象格式化为字符串,(日期 -> 文本)
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
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日
}
}
解析
public Date parse(String source)
:将字符串解析为Date对象。(文本-> 日期)
parse
方法声明了一个异常叫ParseException
:【解析异常】,如果字符串和构造方法的模式不一样,程序就会抛出此异常。
步骤
- 指定日期文本风格:创建
SimpleDateFormat
对象,构造方法中传递指定的模式。 - 给定相应文本风格的日期。
- 将文本解析为日期格式:调用方法
parse
,把符合构造方法中模式的字符串,解析为Date日期。
代码如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.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
}
}
综合应用
- 格式化——解析
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
public class Demo01DateFormat {
public static void main(String[] args) throws ParseException {
demo01(); // throws ParseException 交给虚拟机处理
}
private static void demo01() throws ParseException {
// 解析
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date = sdf.parse("2088年08月08日 15时51分54秒");
System.out.println(date);
// 格式化
String d = sdf.format(date);
System.out.println(d);
}
}
结果:
Sun Aug 08 15:51:54 CST 2088
2088年08月08日 15时51分54秒
案例:计算出一个人出生了多少天
思路
1.获取当前时间对应的毫秒值
2.获取自己出生日期对应的毫秒值
3.两个时间相减(当前时间– 出生日期)
代码:
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 secone = todaySecond-birthdaySecond;
if (secone < 0){
System.out.println("还没出生呢");
} else {
System.out.println("这是你来到这个世界的第" + time / 1000 / 60 / 60 / 24 + "天"); // 这是你来到这个世界的第8347天
}
}
结果:
请输入您的出生日期,格式:yyyy-MM-DD
1997-11-28
这是你来到这个世界的第8365天