java DateFormat及SimpleDateFormat

本文详细介绍了Java中的DateFormat类及其子类SimpleDateFormat的使用,包括日期时间的格式化和解析。通过示例代码展示了如何将Date对象转换为字符串,以及如何将字符串解析为Date对象。同时,解释了格式化规则,并提供了处理日期时间加减的两种方法。最后,文章还提供了一道关于日期时间计算的面试题及其解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 DateFormat是什么?有什么用?

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,把Date对象转换为String对象。
  • 解析:按照指定的格式,把String对象转换为Date对象。

2 构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

  • public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。

3 格式规则

常用的格式规则为:

标识字母(区分大小写)含义
y
M
d
H
m
s

备注:更详细的格式规则,可以参考SimpleDateFormat类的API文档。

4 常用方法

DateFormat类的常用方法有:

  • public String format(Date date):可以把日期对象格式化成我们喜欢的时间形式,返回的是字符串!
  • public String format(Object time):可以把时间毫秒值格式化成我们喜欢的时间形式,返回的是字符串!
  • public Date parse(String date) throws ParseException:把字符串的时间解析成日期对象

4.1 代码示例

public static void main(String[] args) throws ParseException {
    //格式化:从 Date 到 String
    Date d = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    String s = sdf.format(d);
    String ss = sdf.format(d.getTime());
    System.out.println(s);
    System.out.println(ss);
    System.out.println("--------");

    //从 String 到 Date
    String sss = "2048-08-09 11:11:11";
    //ParseException
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date dd = sdf2.parse(sss);
    System.out.println(dd);
}

输出:

2022010816:00:36
2022010816:00:36
--------
Sun Aug 09 11:11:11 GMT+08:00 2048

5 小结

简单日期格式化类java.text.SimpleDateFormat不仅可以把日期对象和时间毫秒值格式化成我们喜欢的字符串时间形式,它还可以把字符串的时间解析成日期对象。

6 补充一道面试题

请问 “2019-11-04 09:30:30” 往后 1天15小时,30分29s后的时间是多少?

6.1 方法一(利用Date)

public static void main(String[] args) throws ParseException {

    // a.定义一个字符串时间
    String date = "2019-11-04 09:30:30";

    // b.把字符串的时间解析成Date日期对象 。(重点)
    // 1.创建一个简单日期格式化对象负责解析字符串的时间成为日期对象
    // 注意:参数必须与被解析的时间的格式完全一致,否则执行报错!!
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 2.开始解析成日期对象
    Date newDate = sdf.parse(date);

    // c.得到日期对象的时间毫秒值 + 往后走 1天15小时,30分29s
    long time = newDate.getTime() + (24L *60*60 + 15*60*60 + 30*60 + 29) * 1000;

    // d.把时间毫秒值格式化成喜欢的字符串的时间形式!
    System.out.println(sdf.format(time));
}

输出:

2019-11-06 01:00:59

值得注意的是,步骤c中的24L利用java的自动类型转换将int类型转换为long类型,以防止越界!!!

6.2 方法二(利用Calendar)

public static void main(String[] args) throws ParseException {
    // 1.创建一个代表2019-11-04 09:30:30的Calendar对象
    // Calendar是一个抽象类,不能创建对象。
    // 我们可以使用它的子类:java.util.GregorianCalendar类。
	// 有两种方式可以获取GregorianCalendar对象:
  	// 1.直接创建GregorianCalendar对象;
  	// 2.通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象
    Calendar calendar = Calendar.getInstance();
    // public void set(int field,int value) 设置某个字段的值
    calendar.set(2019, Calendar.NOVEMBER, 4, 9, 30, 30);

    // 2.得到往后走 1天15小时,30分29s的Calendar对象
    // public void add(int field,int amount)为某个字段增加/减少指定的值
    // 这里的 Calendar.*** 都是Calender中定义的常量
    calendar.add(Calendar.DATE, 1);
    calendar.add(Calendar.HOUR_OF_DAY, 15);
    calendar.add(Calendar.MINUTE, 30);
    calendar.add(Calendar.SECOND, 29);

    // 3.创建一个简单日期格式化对象负责解析字符串的时间成为日期对象
    // 注意:参数必须与被解析的时间的格式完全一致,否则执行报错!!
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    // 4.把calendar对象格式化成指定的字符串的时间形式
    // Calendar中的getTime与Date中的getTime不同,前者返回的是Date对象。
    // Calendar中getTimeInMillis才等同于Date中的getTime,返回毫秒值。
    System.out.println(sdf.format(calendar.getTime()));
}

输出:

2019-11-06 01:00:59
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰茶不冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值