JAVA--日期类总结(Date类和Calendar类)

在JAVA中有两个日期类Date类和Calendar类,在开始的时候只有Date类来表示日期。后来出现了Calendar类对Date类开始替代,由Calendar类来对日期进行计算,之后Date类中的很多方法已经废弃不用,但是两者都是时间表示类。
两者主要区别:java.util.Date是个日期数据,java.util.Calendar 用于日期相关的计算。


具体区别:

Date:

  1. Date表示特定的瞬间,精确到毫秒。它允许把日期解释为年、月、日、小时、分钟和秒值;它也允许格式化和解析日期字符串。现在一般只用来当做时间数据表示类。

Calendar:

  1. Calendar类是一个抽象类,里边提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR),也就是对日期时间进行计算。
  2. Calendar类因为是抽象类无法直接创建对象使用,但是它有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象,该方法是使用默认时区和语言环境获得一个日历,也就是获得当前系统时间。

两者获得当前时间代码示例:

  		//Calendar类获得当前时间
        Calendar calendar=Calendar.getInstance();
        //Date类获得当前时间
        Date date=new Date();
        System.out.println("Calendar表示的当前时间:"+calendar);
        System.out.println("Date表示的当前时间:"+date);

输出结果:
在这里插入图片描述

由此输出的结果可以看到Calendar和Date的区别,Date输出的是一个日期时间表示,而Calendar输出的是一个对象,里面有各种日期数据。
所以如果要用Calendar来输出一个日期时间,只要用gettime()方法获取就行了。而两者转换成时间戳的方法都是gettime(),只不过calendar要在gettime()方法获得时间后再调用gettime()方法才能把日期钻换成时间戳。

Date和Calendar相互转换

主要是通过Calendar类的setTime和getTime方法。setTime方法是Calendar类接收一个Date类型的参数,getTime方法是返回一个Date类型的结果。

Date date = new Date();
Calendar calendar = Calendar.getInstance();
//Date转为Calendar
calendar1.setTime(date);
//Calendar转为Date
Date date = calendar.getTime();

下面介绍Calendar对日期的一些操作

1.指定一个日期(年月日,时分秒)

使用Calendar的set(int year, int month, int date, int hourOfDay, int minute,int second)方法。
set还有其他的重载方法,如果只设定年月日等,没设定的其他日期数据如时分秒,默认用当前系统时间填充。

 		//Calendar类获得实例对象
        Calendar calendar=Calendar.getInstance();
        //设置指定时间,年月入,时分秒
        calendar.set(2020,1,9,16,55,33);
        System.out.println(calendar.getTime());

输出:
在这里插入图片描述
还可以用Calendar的 set(int field, int value) 方法来指定日期
field 表示时间量,它的值可以如下:

  1. Calendar.ERA:表示无加减

  2. Calendar.YEAR:年

  3. Calendar.MONTH:月

  4. Calendar.DATE:日

  5. Calendar.HOUR:小时

  6. Calendar.MINUTE:分钟

  7. Calendar.SECOND:秒

除了上述7个以外,field参数还可以是Calendar中所有的常量。如 Calendar.DAY_OF_MONTH,Calendar.WEEK_OF_MONTH,DAY_OF_WEEK等。然后这个参数要是和周相关,那后面的value参数就是周为单位(一年中的第几周,一个月中的第几周)。同理,和日相关,后面的value参数就以日位单位(一个月中的第几日,一年中的第几日,一周的第几日),和小时相关,后面的value参数就以小时为单位(一天中的第几小时)。
value 表示要对这个时间(年份或者月份等)设置的数值,类型为整数。
示例:

     	//Calendar类获得实例对象
        Calendar calendar=Calendar.getInstance();
        //设置日期的天数为这个月的第18天
        calendar.set(Calendar.DAY_OF_MONTH,18);
        //设置日期的小时为0
        calendar.set(Calendar.HOUR_OF_DAY,0);
        //设置日期的分钟为0
        calendar.set(Calendar.MINUTE,0);
        //设置日期的秒为0
        calendar.set(Calendar.SECOND,0);
        //设置日期的毫秒为0
        calendar.set(Calendar.MILLISECOND,0);
        //其他没设置的日期的年份和月份 就是默认设置系统当前的了
        System.out.println(calendar.getTime());

输出结果:
在这里插入图片描述
这里我的系统时间是2020年1月8日,所以默认的时间年份是2020年,月份是1月份。

2.对指定的日期进行操作,增加减少等

使用Calendar的 add(int field, int amount) 方法来指定日期,field参数和上面的set(int field, int value) 方法中的field参数一样。amount为正,则是增加,amount为负则是减少。
示例:

		//Calendar类获得实例对象
        Calendar calendar=Calendar.getInstance();
        System.out.println("当前时间:"+calendar.getTime());
        //日加5天
        calendar.add(Calendar.DAY_OF_MONTH,5);
        //月份增加10
        calendar.add(Calendar.MONTH,10);
        //年份减少1
        calendar.add(Calendar.YEAR,-1);
        System.out.println("对日期进行加减后的时间:"+calendar.getTime());

输出结果:
在这里插入图片描述


把时间转换成特定的格式

使用SimpleDateFormat转换

SimpleDateFormat是时间简单格式化,可以把Date类型换成特定的String类型,也可以把String格式类型转换成Date类型。所以如果要转换Calendar的时候先把Calendar转换成Date类型。
Date类型转换成特定的时间格式数据(String类型):

		//定义了一个简单的格式转换类,转换的格式是  年份-月份-日期 时:分:秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //Calendar类获得实例对象
        Calendar calendar=Calendar.getInstance();
        System.out.println("当前时间未转换特定格式:"+calendar.getTime());
        //这里calendar.getTime()就是把Calendar类型转换成了 Date类型
        String date=sdf.format(calendar.getTime());
        System.out.println("对当前时间进行了格式转换:"+date);

输出结果:
在这里插入图片描述
特定的时间格式数据(String类型)转换成Date类型:

  		//定义了一个简单的格式转换类,转换的格式是  年份-月份-日期 时:分:秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //定义一个时间格式的字符串
        String date="1998-02-08 11:55:33";
        System.out.println("字符串输出:"+date);
        //把该时间格式的字符串转换成Date日期类型
        Date d=sdf.parse(date);
        System.out.println("把字符串转换成Date日期类型:"+d);

输出结果:
在这里插入图片描述
注:SimpleDateFormat是线程不安全的,所以建议在用到的时候新建一个实例对象。不要使用共享对象,要转变为局部私有对象使用,把共享对象转变为局部私有后就能避免线程不安全问题。虽然会加重创建对象的负担,但是一般情况下性能影响不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值