任务描述
本关任务:使用 Date 类的定义与方法,完成日期格式的之间的比较和格式化转换。
相关知识
java.util 包提供了 Date 类来封装当前的日期和时间,我们可以通过该类来操作时间和日期。在使用该类之前,我们需要先导入 java.util.Date 类。
import java.util.Date;
Date 类提供了两种构造函数来实例化 Date 对象:
- 使用当前日期和时间来初始化对象;
Date date = new Date();
- 第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
Date date1 = new Date(1581997363000L);
接下来我们来看 Date 类的一些常用方法,见下表。
方法 | 描述 |
---|---|
boolean after(Date date) | 若当调用此方法的 Date 对象在指定日期之后返回 true,否则返回 false。 |
boolean before(Date date) | 若当调用此方法的 Date 对象在指定日期之前返回 true,否则返回 false。 |
Object clone( ) | 返回此对象的副本。 |
int compareTo(Date date) | 比较当调用此方法的 Date 对象和指定日期。两者相等时候返回 0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
boolean equals(Object date) | 当调用此方法的 Date 对象和指定日期相等时候返回 true,否则返回 false。 |
long getTime( ) | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
void setTime(long time) | 用自 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒数设置时间和日期。 |
String toString( ) | 转换 Date 对象为 String 表示形式,并返回该字符串。 |
例子:
- boolean after(Date date):若当调用此方法的 Date 对象在指定日期之后返回 true,否则返回 false;
Date date = new Date(); // 使用当前时间来创建对象
System.out.println(date);
Date date1 = new Date(1581997363000L); // 使用当前参数创建对象
System.out.println(date1);
boolean after = date.after(date1); // 判断 date 是否在指定日期之后
System.out.println(after);
Tue Feb 18 12:02:40 CST 2020
Tue Feb 18 11:42:43 CST 2020
true
注意:因为有时区问题,我们是在东八区,所以时间上加了 8 个小时.
-
int compareTo(Date date):比较调用此方法的 Date 对象和指定 Date 对象;
Date date = new Date(); // 使用当前时间来创建对象
System.out.println(date);
Date date1 = new Date(1581997363000L); // 使用当前参数创建对象
System.out.println(date1);
int i = date.compareTo(date1);// 比较调用此方法的 date 对象和指定 date1 对象
System.out.println(i);
执行结果:
Tue Feb 18 12:05:43 CST 2020
Tue Feb 18 11:42:43 CST 2020
1
-
long getTime( ):返回此对象表示的毫秒数
Date date1 = new Date(1581997363000L); // 使用当前参数创建对象
System.out.println(date1);
long time = date1.getTime(); // 返回当前对象的毫秒
System.out.println(time);
执行结果:
Tue Feb 18 11:42:43 CST 2020
1581997363000
-
void setTime(long time):根据毫秒数设置时间和日期;
Date date = new Date(); // 使用当前时间来创建对象
System.out.println(date);
date.setTime(1581997363000L); // 根据毫秒数设置时间
System.out.println(date);
执行结果:
Tue Feb 18 12:16:48 CST 2020
Tue Feb 18 11:42:43 CST 2020
-
String toString( ):转换 Date 对象为 String 表示形式,并返回该字符串。
Date date = new Date(); // 使用当前时间来创建对象
System.out.println(date);
String s = date.toString(); // 将 Date 对象转换为字符串形式
System.out.println(s);
通过上面的学习,我们对 Date 类已经有了一定的了解,但是我们发现上面的日期格式和我们生活中的日期格式不太相同,那我们该怎么办呢?
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。
要想使用该类,我们首先需要导包。
import java.text.SimpleDateFormat;
创建一个 SimpleDateFormat 对象:
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
例子:
-
将日期格式转换为格式化的日期字符串;
Date date = new Date(); // 使用当前时间来创建对象
System.out.println(date);
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); // 创建日期格式化类对象
String format = ft.format(date); // //将日期对象转换为字符串
System.out.println(format);
执行结果:
Tue Feb 18 12:37:34 CST 2020
2020-02-18 12:37:34
-
将 2016年06月18日 12:37:34 转换为日期格式。
String s1 = "2016年06月18日 12:37:34"; // 创建一个日期格式的字符串
SimpleDateFormat ft = new SimpleDateFormat ("yyyy年MM月dd日 hh:mm:ss");
Date date1 = null;
try {
date1 = ft.parse(s1); // 将字符串转换为日期格式
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date1);
执行结果:
Sat Jun 18 00:37:34 CST 2016
注意:parse() 需要抛出 ParseException 异常。
/**
* 完成日期格式的之间的比较和格式化转换。
*/
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class TestDate {
public static void main(String[] args) {
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 获取键盘输入的 long 类型的值,该值表示毫秒数,以该值为参数创建一个 Date 对象
Scanner input = new Scanner(System.in);
long l = input.nextLong();
Date date1 = new Date(l);
// 以当前时间创建 Date 对象
Date date2 = new Date();
//将根据键盘输入所创建的日期转换为“xxxx/xx/xx xx时xx分xx秒”这种格式后输出
SimpleDateFormat SDF = new SimpleDateFormat("yyyy/MM/dd HH时mm分ss秒");
String str = SDF.format(date1);
System.out.println(str);
// 比较根据键盘输入所创建的日期是否在当前时间之前
boolean b = date1.before(date2);
System.out.println(str + "时间在当前时间之前:" + b);
/********** End **********/
}
}