zoukankan      html  css  js  c++  java
  • Java的Date类与Calendar类

    一:Date类

      在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。

      1.使用Date类代表当前系统时间

      Date date = new Date(); System.out.println(date);

      使用Date类的默认构造方法创建出来的对象就代表当前的时间,由于Date类覆盖了toString()方法。所以可以直接输出Date类型的对象,显示的结果如下:

      Sun Aug 28 10:23:06 CST 2016

      在该格式中,Sun代表Sunday(周日),Aug 代表August(八月),28代表288号,CST代表China Standard Time(中国标准时间,也就是北京时间(东八区))。

      2.使用Date类代表指定时间

      Date date = new Date(2016-1900,8-1,28); System.out.println(date);

      使用带参的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。显示结果如下:

      Sun Aug 28 00:00:00 CST 2016  代表的日期就是2016年8月28号

      实际代表的年月日时分秒的日期对象和这个类似。

      3.获取Date对象中的信息

      

      使用Date类中的get方法,可以获得Date类对象的相关信息(但可以看出,Date类中的这些方法都已经过时)。需要注意的是使用getYear获得的是Date对象中年份减去1900以后的值,所以需要显示对应的年份则需要在返回值的基础上加1900,月份类似。在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。

      4.Date对象和相对时间的互转

      Date date = new Date(2016-1900,8-1,28);  long time = 1290876532190L;

      //将Date类的对象转换为相对时间

      long t = date.getTime(); System.out.println(t);  //结果是:1472313600000

      //将相对时间转换为Date类的对象

      Date da = new (time); System.out.println(da);  //结果是:Sun Aug 28 00:00:00 CST 2016 

      5.Date对象之间的比较

      Date date = new Date(2016-1900,8-1,28);

      Date date1 = new Date();

      date.compareTo(date1)返回int类型。如果等于0,则date=date1;如果小于0,则date<date1;

      使用Date对象中的getTime方法,可以将Date类的对象转换为相对时间,使用Date类的构造方法,可以将相对时间转换为Date类的对象。经过转换以后,既方便了时间的计算,也使时间显示比较直观了。

      二:Calendar类

      从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现(Date的一些方法都过时了)。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

      Calender类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance()方法创建即可。

      1.使用Calendar类代表当前时间

      Calendar c = Calendar.getInstance(); System.out.println(c);  //返回的是一个Calendar对象

      由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

      2.使用Calendar类代表指定的时间

      Calendar c1 = Calendar.getInstance();

      c1.set(2016,8-1,28);

      使用过Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后在设定该对象中的年月日参数来完成。

      set方法的声明为:public final void set(int year,int month,int date)

      以上示例代码设置的时间为2016年8月28日,其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。

      如果只设定某个字段某个字段,例如日期的值,则可以使用如下set方法:

      public void set(int field,int value)

      在该方法中,参数field代表要设置的字段的类型,常见类型如下:

      Calendar.YEAR---年份;Calendar.MONTH---月份; Calendar.DATE---日期; Calendar.DAY_OF_MONTH---日期,和Calendar.DATE字段完全相同;

      Calendar.HOUR---12小时制的小时数;Calendar.HOUR_OF_DAY---24小时制的小时数;Calendar.MINUTE---分钟;Calendar.SECOND---秒;Calendar.DAY_OF_WEEK---星期几。

      后续的参数value代表设置成的值。例如:c1.set(Calendar.DATE,10);该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。

      3.获得Calendar类中的信息

      

      在Calendar类中,周日是1,周一是2,周二是3,依次类推。

      4.其他方法说明

      其实Calendar类中还提供了很多其他有用的方法,下面简单的介绍几个常见方法的使用。

        (1)add方法

        public abstract void add(int field,int amount)

        该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少是amount的值为负。

        例如计算当前时间100天以后的日期,代码如下:

        Calendar c3 = Calendar.getInstance();

        c3.add(Calendar.DATE,100);

        int year = c3.get(Calendar.YEAR); 

        int month = c3.get(Calendar.MONTH);

        int date  = c3.get(Calendar.DATE);

        System.out.println(year+"年"+month+"月"+date+"日");   

        这里add方法是指在c3对象的Calendar.DATE,也就是日期字段上增加100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的   日期,例如程序的输出结果可能为:2016年11月6日

        (2)after方法

        public boolean after(Object when)

        该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。例如:

        Calebdar c4 = Calendar.getInstance(); c4.set(2016,8-1,28);

        Calendar c5 = Calendar.getInstance();c5.set(2016,10-1,1);

        boolean b = c5.after(c4);

        System.out.println(b);   

        在该示例代码中对象c4代表的时间是2016年8月28号,对象c5代表的时间是2016年10月1号,则对象c5代表的日期在c4代表的日期之后,所以after   方法的返回值是true。

        另外一个类似的方法是before,该方法是判断当前日期对象是否位于另外一个日期对象之前。

      5.Calendar对象和相对时间之间的转换

      Calendar c6 = Calendar.getInstance();  long t = 1252785271098L;

      //将Calendar对象转换为相对时间

      long t1 = c6.getTimeInMillis();

      //将相对时间转换成Calendar对象

      Calendar c9 = Calendar.getInstance();

      c9.setTimeInMillis(t1);

      在转换时,使用Calendar类中的getTimeInMillis方法可以将Calendar对象转换为相对时间。在将相对时间转换为Calendar对象时,首先创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis方法设置时间即可。

      5.应用实例

      5.1计算两个日期之间相差的天数

      例如计算2016年8月20号和2016年8月29号之间相差的天数。该程序实现的原理为:首先代表两个特定的时间点,这里使用Calendar的对象进行代表,然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以一天的毫秒数(24小时*60分钟*60秒*1000毫秒)即可获得对应的天数。实现该示例的完整代码如下:

      

      5.2输出当月的日历

      该示例的功能是输出当前系统时间所在月的日历,例如当前系统时间是2016年8月29日,则输出2016年8月的日历。

      该程序实现的原理为:首先获得该月1号是星期几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。即如果1号是星期一,则打印一个单位的空格,如果1号是星期二,则打印两个单位的空格,依次类推。打印完星期六的日期以后,进行换行。实现该示例的完整代码如下:

      

    原文链接:https://www.cnblogs.com/vanl/p/5815561.html

  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/MuZi0627/p/10418165.html
Copyright © 2011-2022 走看看