[Java] SimpleDateFormat类的介绍与使用

简要介绍下这个Java 8之前的日期API的使用。

SimpleDateFormat类

该类主要用于对util.Date类的格式化和解析。以下我们从实例化、格式化和解析三个方面来了解这个类的作用。
关于Date类的使用请看这里

实例化

实例化主要用到的有两种构造器:

		// 空参构造器,采用默认格式
		SimpleDateFormat sdf = new SimpleDateFormat();
		// 带参指定格式的构造器
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

参数中对应字符意义如下:
y:年
M:月
d:日
h:时
m:分
s:秒

格式化

格式化指的是将储存日期的类转化为字符串记录的日期的形式,这里主要指Date类转化为String类。
格式化主要靠调用format(Date date)方法,该方法按format指定的格式将Date对象转化为一个String对象,并返回这个String对象的引用。源码:

public final String format(Date date)
    {
        return format(date, new StringBuffer(),
                      DontCareFieldPosition.INSTANCE).toString();
    }

方法的使用:

		Date date = new Date();				// 新建一个util.Date对象
        System.out.println(date);			// Wed Jun 24 11:48:10 CST 2020

        String format = sdf.format(date);	// 格式化:按默认的格式
        System.out.println(format);			// 20-6-24 上午11:48

		String format1 = sdf1.format(date);	// 格式化,按给定的格式
		System.out.println(format1);		// 2020-06-24 12:09:58

值得一提的是,MMM将以中文形式输出月份:

		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MMM-dd hh:mm:ss");// 3*M
        String format1 = sdf2.format(date);
        System.out.println(format1);				// 2020-六月-24 12:16:05

解析

解析是格式化的逆过程,指的是将表示日期的字符串转化为记载日期的类,这里指的是util.Date类。
解析主要依靠parse(String source)方法,返回一个Date对象的引用,同时会抛ParseException异常。源码:

public Date parse(String source) throws ParseException
    {
        ParsePosition pos = new ParsePosition(0);
        Date result = parse(source, pos);
        if (pos.index == 0)
            throw new ParseException("Unparseable date: \"" + source + "\"" ,
                pos.errorIndex);
        return result;
    }

现实中人们记录一个日期时间的所采取的文字格式是多种多样的,有的人习惯以年月日的方式(2020-06-24)记录,有的人习惯反过来(24-06-2020),还有人喜欢用斜杠来分隔(2020/06/24)。

格式的多样给计算机记录人类所表示的日期带来了一定困难,因此在解析时,我们需要先指定一个标准格式。这个标准格式既是SimpleDateFormat对象新建时构造器所传入的格式,换言之,与SimpleDateFormat对象进行格式化采取的格式是一致的。

		// 空参构造器默认的格式是:"20-6-24 上午11:48",我们则必须使用与其相同的格式的字符串来表示日期
		String str = "2020-6-22 下午1:21";	// 采取其默认格式化时的格式
        Date date1 = sdf.parse(str);		// 解析,获取一个Date类对象的引用
        System.out.println(date1);			// Mon Jun 22 13:21:00 CST 2020

若传入字符串的格式不正确时,会抛ParseException。

		String str = "2020/6/22 下午1:21";	// 修改'-'为'/'
        Date date1 = sdf.parse(str);		// 异常

以上是对构造时使用了默认空参构造器的SimpleDateFormat对象进行测试。同理,对于构造时传入了参数规定了格式的SimpleDateFormat对象,解析时也需要按规定的格式传入字符串。

		Date date2 = sdf1.parse("2019-11-22 11:34:32");
		System.out.println(date2);

SimpleDateFormat类的主要功能就是格式化和解析,下面通过两个简单的练习来加深对这个类的掌握。

两个简单的练习

1、将字符串"2077-01-01"转化为sql.Date存储。
	@Test
    public void exer1() throws ParseException {
        String str = "2077-01-01";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date utilDate = sdf.parse(str);
//        System.out.println(utilDate);
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        System.out.println(sqlDate);
    }
2、计算2020-07-01至1990-09-23之间有多少天。
	@Test
    public void exer2() throws ParseException {
        String start = "1990-09-23";
        String end = "2020-07-01";
         
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = simpleDateFormat.parse(start);
        Date endDate = simpleDateFormat.parse(end);
        int days = (int)((endDate.getTime()-startDate.getTime())/(1000*60*60*24)+1);
    }
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值