Java常用类库:操作时间的类

Java常用类库

1、操作时间的类

  Java常用类库中提供了三个关于操作时间的类:Class Date,Class DateFormat,Class Calendar,那么接下来就分别对这三个类库进行详细的介绍,看看这三个类库是如何对时间进行相应操作的。

1.1、Class Date

1.1.1、Class Date的简介

 Date类所继承的父类为Object类;所实现的接口有:Serializable, Cloneable, Comparable这些接口。该类的作用是进行相关的时间操作:获取和设置时间,进行时间之间的比较等。使用方法时需要进行导包操作,需要导入的包为:java.util.Date。

  注意:使用该类时,所涉及的时间是毫秒为单位的时间戳。时间戳的概念:从1970年1月1日00:00:00 开始(不同的时区不一致:中国为1970年1月1日08:00:00 开始)所计算出的毫秒数。

  介绍完该类的简介,下面来了解该类有哪些方法,并且这些方法可以实现什么功能。因为该类出现在Java1.0版本,而后在Java1.1版本后进行了相应的更改:其中的一些功能被DateFormat和Calendar这两个类所取代,所以接下来我就介绍一些Date类中还可以使用的方法。

1.1.2、构造方法

  该类有两个构造方法,一个是无参构造方法,作用是:创建当前时间的Date对象,另一个是传一个long类型参数的构造方法,作用是:创建所传参数(时间戳)的Date对象。

  • Date() —— 无参构造方法
  • Date​(long date) —— 一参构造方法
1.1.3、getTime方法

  使用该方法后会返回一个long类型的返回值,使用方法时不需要传参数,作用是:获得Date对象所对应的时间戳。

  以下是Java代码:

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);
    }
}

  输出效果图:

在这里插入图片描述

1.1.4、setTime​方法

  使用该方法后没有返回值,使用方法时需要传入一个long类型的参数,作用是:将Date对象的时间戳设置为你传入的值。

  以下是Java代码:

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);
        date.setTime(1546521452132L);
        long time1 = date.getTime();
        System.out.println(time1);
    }
}

  输出效果图:

在这里插入图片描述

  这效果图可以很清楚的看出我用setTime方法将Date对象原来的时间戳更改成我设置的时间戳。

1.1.5、after​方法

  使用该方法后会返回一个boolean类型的返回值,使用方法时需要传入一个Date对象,作用是:判断调用方法的对象的时间戳是否在传入对象的时间戳之后,如果是则返回true,不是则返回false。

  以下是Java代码:

public class Test1 {
    public static void main(String[] args) {
        Date d1 = new Date();
        System.out.println("d1对象的时间戳为:"+d1.getTime());
        Date d2 = new Date(1685854632542L);
        System.out.println("d2对象的时间戳为:"+d2.getTime());
        System.out.println(d1.after(d2));
    }
}

  输出效果图:

在这里插入图片描述

  由效果图可以很清楚的知道d1对象的时间戳是在d2对象的时间戳之前的,所以返回的是false。

1.1.6、before​方法

  使用该方法后会返回一个boolean类型的返回值,使用方法时需要传入一个Date对象,作用是:判断调用方法的对象的时间戳是否在传入对象的时间戳之前,如果是则返回true,不是则返回false。

  代码就拿上面after方法的代码改一下,以下是Java代码:

public class Test1 {
    public static void main(String[] args) {
        Date d1 = new Date();
        System.out.println("d1对象的时间戳为:"+d1.getTime());
        Date d2 = new Date(1685854632542L);
        System.out.println("d2对象的时间戳为:"+d2.getTime());
        //System.out.println(d1.after(d2));
        System.out.println(d1.before(d2));
    }
}

  输出效果图:

在这里插入图片描述

  由效果图可以很清楚的知道d1对象的时间戳是在d2对象的时间戳之前的,所以返回的是true。

1.1.7、equals方法

  使用该方法后会返回一个boolean类型的返回值,使用方法时需要传入一个Oject类型的参数,作用是:判断调用方法的对象的时间戳是否与传入对象的时间戳相同,如果是相同则返回true,不是相同则返回false。

  以下是Java代码:

public class Test2 {
    public static void main(String[] args) {
        Date d1 = new Date();
        Date d2 = new Date(1253665895463L);
        System.out.println("d1时间戳为:"+d1.getTime());
        System.out.println("d2时间戳为:"+d2.getTime());
        System.out.println(d1.equals(d2));
        System.out.println(d2.equals(d2));
    }
}

  输出效果图:

在这里插入图片描述

  由效果图显示:d1对象的时间戳和d2对象的时间戳是不一样的,返回false;d2对象自己和自己比较肯定是一样的,返回true。

1.1.8、compareTo方法

  使用该方法后会有一个int类型的返回值,使用时传入一个Data对象,作用是:判断调用方法的对象的时间戳是否与传入对象的时间戳相同,相同返回0;前者时间戳在后者时间戳之前返回-1;在之后返回1;

  代码就拿上面equals方法的代码改一下,以下是Java代码:

public class Test2 {
    public static void main(String[] args) {
        Date d1 = new Date();
        Date d2 = new Date(1253665895463L);
        Date d3 = new Date(1683665895463L);
        System.out.println("d1时间戳为:"+d1.getTime());
        System.out.println("d2时间戳为:"+d2.getTime());
        System.out.println("d3时间戳为:"+d3.getTime());
        System.out.println(d1.compareTo(d2));
        System.out.println(d2.compareTo(d2));
        System.out.println(d1.compareTo(d3));
        //System.out.println(d1.equals(d2));
        //System.out.println(d2.equals(d2));
    }
}

  输出效果图:

在这里插入图片描述

  由效果图显示:首先,d1对象的时间戳是在d2对象时间戳之后的,所以返回1;接着,d2对象自己与自己比较肯定相等,所以返回0,最后d1对象的时间戳是在d3对象时间戳之前的,所以返回-1。

  关于Date类相关知识的介绍就到这,接下来介绍DateFoemat类。

1.2、Class DateFormat

1.2.1、Class DateFormat的简介

  该类是抽象类,想要使用该类需要的方法需要借助它的唯一子类:Class SimpleDateFormat。DateFormat这个类主要的作用就是进行时间格式的自定义,使用该类中的方法可以将时间戳格式化成你自己定义的时间格式,也可以将特定的时间(该时间的时间格式是你定义的)转成时间戳。

1.2.2、Class SimpleDateFormat的使用
1.2.2.1、了解如何自定义时间格式

  在自定义时间格式前,先了解如何自定义时间格式。自定义格式时需要用到SimpleDateFormat类的其中一个构造方法:

  • SimpleDateFormat​(String pattern) ——传入一个自定义时间格式的字符串

  

1.2.2.2、构造方法中传入字符串的结构语法

  在编写传入的字符串格式时,会用到的标识和标识所代表的意义如下图所示:

在这里插入图片描述

  看这张图你们可能是一脸懵逼,别担心,我来告诉你常用到的有哪些(当然其他的标识你们也可以尝试一下看看):

  1. y —— 代表一位年数字,如书写格式:“yyyy年”(表示为2021年)、“yyyy-”(表示为2021-)、“yyyy.”(表示为2021.)等等
  2. M —— 代表一位月数字,如书写格式:“MM月”(表示为01月)、“MM-”(表示为01-)、“MM.”(表示为01.)等等
  3. d —— 代表一位日数字,如书写格式:“dd日”(表示为01日)、“dd”(表示为01)等等
  4. H —— 代表一位时钟数字,如书写格式:“HH时”(表示为01时)、“HH:”(表示为01:)等等
  5. m —— 代表一位分钟数字,如书写格式:“mm分”(表示为01分)、“mm:”(表示为01:)等等
  6. s —— 代表一位秒钟数字,如书写格式:“ss秒”(表示为01秒)、“ss”(表示为01)等等

  具体的Java代码

	//将时间格式定义为:2020年01月01日01时01分01秒
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
1.2.2.3、自定义时间与Date对象之间的相互转换

  想要进行自定义时间与Date对象之间的相互转换,需要SimpleDateFormat类的对象调用两个方法:format方法(将Date对象转换成自定义的时间格式)、parse方法(将自定义的时间转换成Date对象)

  • format方法 —— 返回值为String类型,传入一个Date对象
  • parse方法 —— 返回值为Date类型,传入一个String类型字符串,注意:该String类型的字符串的值必须严格按照你自定义的时间格式,不然会抛出异常

  以下是Java代码

public class Test {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        String format = sdf.format(new Date());
        Date date = sdf.parse("2021年01月26日23时29分16秒");
        System.out.println(format);
        System.out.println(date.getTime());
        //错误格式
        Date date2 = sdf.parse("2021年01月26日23时29分16");
    }
}

  以下是效果图

在这里插入图片描述

  可以看到效果图是报错抛了一个 ParseException 异常,所以切记:一定要按照你定义的时间格式来编写时间字符串。当然,异常用得好也可以实现功能的——在具体编程可以用捕捉异常的方式来判断用户输入的时间格式是否正确。

  DateFormat类的相关知识就介绍到这,接下来介绍最后一个操作时间的类: Calendar类

1.3、Class Calendar

1.3.1、Class Calendar的简介

  该类也是个抽象类,继承的父类为:Object类;实现了这些接口:Serializable, Cloneable, Comparable,并且使用该类的方法进行相关操作时需要进行导包操作,导入的包名为:java.util.Calendar。该类的作用时:可以进行一些与日历信息相关的操作,比如:获取当前的年、月、日;设置Calendar对象的日历信息;获取日历信息的最大值等等。

  接下来介绍Calendar类中操作日历信息的方法。

1.3.2、创建Calendar对象的方法

  因为Calendar类是抽象类,所以不能使用构造方法创建对象(使用new关键字创建对象的方法),但是该类有一个创建Calendar类对象的方法:getInstance方法,该方法就是让Calendar类对象获取默认时区和区域设置的日历(适用于国际化,解决了Date类的短板)。以下是创建Calendar类对象的代码格式:

	Calendar c = Calendar.getInstance();
1.3.3、熟悉Calendar类中的字段

  熟悉Calendar类中字段,是熟练使用该类方法的前提,因为Calendar类的很多方法中需要传入的参数中就有这些字段。下面介绍的是Calendar类中常用的字段:

  • DATE —— 该字段名表示当月的日期
  • MONTH —— 该字段名表示当年的第几个月,注意:第0个月为1月,以此类推
  • YEAR —— 该字段名表示年份
  • HOUR —— 该字段名表示上午或下午的第几个小时
  • DAY_OF_MONTH —— 该字段名表示当月的第几天
  • DAY_OF_WEEK —— 该字段名表示一个星期的第几天,注意:第1天代表星期天,第2天代表星期一,以此类推
  • DAY_OF_WEEK_IN_MONTH —— 该字段名表示一个星期的第几天,注意:第1天代表星期天,第2天代表星期一,以此类推
  • DAY_OF_YEAR —— 该字段名表示当年的第几天
  • HOUR_OF_DAY —— 该字段名编号表示当天的第几个小时
  • WEEK_OF_MONTH —— 该字段名表示当月的第几周
  • WEEK_OF_YEAR —— 该字段名表示当年的第几周

  字段的使用格式为:Calendar.字段名,就比如:

		Calendar.DATE
1.3.4、 get方法

  该方法使用后会有一个int类型的返回值,使用时需要传入一个Calendar类的字段,作用是:返回该字段所代表的日历信息。

  以下是Java代码

public class Test {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DATE);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int week = c.get(Calendar.DAY_OF_WEEK);
        String w = "";
        switch (week){
            case 1:
                w = "天";
                break;
            case 2:
                w = "一";
                break;
            case 3:
                w = "二";
                break;
            case 4:
                w = "三";
                break;
            case 5:
                w = "四";
                break;
            case 6:
                w = "五";
                break;
            default:
                w = "六";
                break;
        }
        System.out.println("现在是:"+year+"年"+(month+1)+"月"+day+"日"+hour+"时,并且这天是星期"+w);
    }
}

  以下是效果图:

在这里插入图片描述

  更多的字段你们可以自己去尝试以下效果,我就演示这几个字段给大家看效果,其他的就你们自己去体验体验了。

1.3.5、set方法

  该方法没有返回值,传参方式有好几种,作用是给Calendar对象设置自己指定的日历信息。传参方法为以下几种:

  • set​(int field, int value) —— 第一个参数是Calendar类的字段,第二个参数为你所设置的值
  • set​(int year, int month, int date) —— 第一个参数设置年,第二个参数设置月,第三个参数设置日
  • set​(int year, int month, int date, int hourOfDay, int minute) —— 第一个参数设置年、第二个参数设置月、第三个参数设置日、第四个参数设置时、第五个参数设置分
  • set​(int year, int month, int date, int hourOfDay, int minute, int second) —— 第一个参数设置年、第二个参数设置月、第三个参数设置日、第四个参数设置时、第五个参数设置分、第六个参数设置秒

  我就拿第一个传参方式演示了 ,其他的传参方式你们自己尝试。

  以下是Java代码

public class Test1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
        c.set(Calendar.YEAR,2022);
        int year1 = c.get(Calendar.YEAR);
        System.out.println(year1);
    }
}

  以下是效果图:

在这里插入图片描述

  从效果图可以看到第一个时间是没有修改的本机时间:2021,第二个时间是我设置的时间:2022,调用set方法可以将Calendar对象的日历信息中的年份设置成自己想要的时间。

1.3.6、add方法

  使用该方法后没有返回值,使用时需要传递两个参数:第一个参数是Calendar类的字段,第二个参数是int类型的参数,作用是:将字段所对应的日历信息加上(传递整数)或减去(传递负数)你所指定的值。

  以下是Java代码

public class Test2 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
        c.add(Calendar.YEAR,3);
        int year1 = c.get(Calendar.YEAR);
        System.out.println(year1);
    }
}

  以下是效果图:

在这里插入图片描述

  从效果图可以看到第一个时间是没有修改的本机时间:2021,第二个时间是我使用add方法后将Calendar对象的日历信息中的年份加上了3,就变成了:2024。

1.3.7、getActualMaximum方法

  该方式使用后会有一个int类型的返回值,使用该方式是时需要传入一个Calendar类的字段,作用是:获取相应字段的最大值。

  以下是Java代码

public class Test3 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        int month = c.get(Calendar.MONTH);
        int year = c.get(Calendar.YEAR);
        System.out.println(year+"年的"+(month+1)+"有"+maxDay+"天");

    }
}

  以下是效果图:

在这里插入图片描述

  从getActualMaximum方法还可以很直接的反应出该年是不是闰年:看2月份的最大天数,很实用吧,不需要你去写闰年的判定表达式来去判定。给你们演示一下:

  以下是Java代码

public class Test4 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        //将年份设置成你想要的年份
        c.set(Calendar.YEAR,2020);
        //将月份设置成2月
        c.set(Calendar.MONTH,1);
        int year = c.get(Calendar.YEAR);
        int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        if(maxDay==29){
            System.out.println(year+"年是闰年");
        }else {
            System.out.println(year+"年不是闰年");
        }
    }
}

  以下是效果图:

在这里插入图片描述

  关于Calendar类的相关方法就介绍到这,这些方法都是你在操作日历信息使用的到的方法,当然该类还有其他方法,我就不做过多的展示了,毕竟用的很少,感兴趣的小伙伴可以自行了解。

  好了关于操作时间常用的三个类就介绍完了,希望文章可以带给你们一点收获,感谢大家的阅读。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值