DateFormat类
- 能够使用将日期格式化为字符串的方法
- 能够使用将字符串转换成日期的方法
1. 概述
java.text.DateFormat
是日期/时间格式化子类的抽象类,这个类可以帮我们完成日期和文本之间的转换,
即可以在Date对象与String对象之间进行转换。
-
格式化:按照指定的格式,从Date对象转换为String对象(日期 -> 文本)
-
解析:按照指定的格式,从String对象转换为Date对象(文本-> 日期)
2. 构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。
这个类需要一个模式(格式)来指定格式化或解析的标准。
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号来构造
SimpleDateFormat
.
2.1 参数
pattern:是一个字符串,代表日期时间的自定义格式,传递指定的模式。
2.2 模式
如 yyyy-MM-dd HH:mm:ss
:会把模式替换为对应的日期和时间
代码:
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 对应的日期格式如:2018-01-16 15:06:38
3. 格式规则
格式中的字母不能更改,连接模式的符号可以改变 :yyyy年MM月dd日 HH时mm分ss秒
更详细的格式规则,可以参考SimpleDateFormat类的API文档
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
4. 常用方法
4.1 格式化
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日
}
}
4.2 解析
public Date parse(String source)
:将字符串解析为Date对象。(文本-> 日期)
parse
方法声明了一个异常叫ParseException
:【解析异常】如果字符串和构造方法的模式不一样,程序就会抛出此异常。
4.2.1 解析步骤
- 创建
SimpleDateFormat
对象,构造方法中传递指定的模式 - 调用
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
}
}
5. 综合应用
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天