Java 时间类 Date、Calendar 及用法

时间类介绍

在java中,时间类主要有DateCalendar,暂时只介绍java.util.*下的时间类,对于java.sql.*下的先不做介绍。
主要内容有以下几个。

  • 1、如何获取当前时间参数
  • 2、如何过去某一个月第一天和最后一天
  • 3、如何加减日期
  • 4、获取两个时间之间的时间差
    首先,我们需要了解API下对其的介绍,对于Date,很多方法已经过时迁移到了Calendar类上,但是这是最初的时间类,构造方法主要介绍两种即
    Date date= new Date();//分配对象并初始话
    Date date= new Date(long date)//分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日00:00:00 GMT)以来的指定毫秒数。
    可以看得出来,Date是以历元为标准的,简单的验证下你的猜想。new Date().getYear() 的值是  120 然而今年是 2020
    对于Calendar,与Date不同的是,他对Date的时间历元进行偏移,要是看括号里的有点晕可不看。API(Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 197011 日的 00:00:00.000,格里高利历)的偏移量)。
  Calendar不得不说的就是类方法 getInstance,Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化

Calendar rightNow = Calendar.getInstance();

实践

  • 1.如何获取当前参数
public void getCurrentTime() {
        Date NowDate = new Date();
        //具体日期格式后面自己修改,HH代表24小时制,hh代表12小时制,
        SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss");
        String CurrentTime1 = formatter1.format(NowDate);
        String CurrentTime2 = formatter2.format(NowDate);
        System.out.println(CurrentTime1);
        System.out.println(CurrentTime2);
    }

输出结果:

2020-09-02 08:45:25
2020-09-02 上午 08:45:25
  • 2.如何获取某个月的第一天和最后一天
//获取某年某月的最后一天
    //注意月份是按0---11总共12个月,不是从1开始的,但是一个月几号第几天却是从1开始的

    /**
     * @param year  对应的年份
     * @param month 对应的月份
     * @return
     */
    public static String getLastDayOfMonth(int year,int month) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR,year);
        calendar.set(Calendar.MONTH,month-1);
        calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DATE));

        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
        String date = sdf.format(calendar.getTime());

        return date;
    }

    //获取某年某月的第一天
    public static String getFirstDayOfMonth(int year,int month) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR,year);
        calendar.set(Calendar.MONTH,month-1);
        calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMinimum(Calendar.DATE));

        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
        String date = sdf.format(calendar.getTime());

        return date;
    }

测试:

public void test() {
        String firstDayOfMonth = CalendarUtil.getFirstDayOfMonth(2020, 9);
        String lastDayOfMonth = CalendarUtil.getLastDayOfMonth(2020, 9);
        System.out.println(firstDayOfMonth+"---"+lastDayOfMonth);
    }

输出结果

2020-09-01---2020-09-30
  • 3.如何加减日期
Calendar类中提供了add方法
add(f, delta)将 delta 添加到 f 字段中,主要有两个规则

Add 规则 1: 调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。

Add 规则 2: 如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。

代码示例:

//往后n天的日期
    public static String getTargetDay(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH,+day);
        Date time = calendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sdf.format(time);

        return date;
    }

测试:

public void test5() {
        String targetDay1 = CalendarUtil.getTargetDay(20);
        String targetDay2 = CalendarUtil.getTargetDay(-20);
        System.out.println(targetDay1);
        System.out.println(targetDay2);
    }

结果:

例如现在是92日,往后推20天就是22日,往前推20天就是8132020-09-22
2020-08-13
  • 4.获取两个时间之间的时间差
方法很多,就不赘述了,主要是将时间转化为时间时间戳,最后通过两个时间对应的时间戳进行计算。最后将 long 类型的时间戳转换为自己需要的时间的格式
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
247
粉丝
18
喜欢
217
收藏
62
排名:731
访问:9753
私信
所有博文
社区赞助商