• Calender的使用详解


    Calendar和GregorianCalendar简介

    Calendar的中文翻译是日历,实际上,在历史上有着许多种计时的方法。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就是"Gregorian Calendar"。也就是我们在讲述年份时常用"公元**年"。Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。Calendar.getInstance()中所获得的实例就是一个"GreogrianCalendar"对象。

    Calendar获取时间的常见方法

    import java.util.Calendar;
    public class Test
    {
        public static void main(String[] args)
        {
            Calendar cal = Calendar.getInstance();
            int year = cal.get(Calendar.YEAR);
            //比当前月份少1
            int month = cal.get(Calendar.MONTH);
            //date表示日期,day表示天数,所以date与day_of_month相同
            int date = cal.get(Calendar.DATE);
            int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
            //表示本周的第几天,从周日开始计算
            int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
            int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
            //12小时制
            int hour = cal.get(Calendar.HOUR);
            //24小时制
            int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
            int minute = cal.get(Calendar.MINUTE);
            int second = cal.get(Calendar.SECOND);
            int millisecond = cal.get(Calendar.MILLISECOND);
            int maxDate = cal.getActualMaximum(Calendar.DATE);
            System.out.println("现在的年份为:" + year);
            System.out.println("现在的月份为:" + month);
            System.out.println("现在的号为:" + date);
            System.out.println("现在的号为:" + dayOfMonth);
            System.out.println("现在是星期:" + dayOfWeek);
            System.out.println("现在过了的天数为:" + dayOfYear);
            System.out.println("现在几点:" + hour);
            System.out.println("现在几点:" + hourOfDay);
            System.out.println("现在几分:" + minute);
            System.out.println("现在几秒:" + second);
            System.out.println("现在几毫秒:" + millisecond);
            System.out.println("本月最后一天是:" + maxDate);
        }
    }

    补充说明:
    (1)注意getActualMaximum()和getMaximum()的区别。getMaximum()获取的“字段最大值”,是指在综合所有的日期,在所有这些日期中得出的“字段最大值”。例如getMaximum(Calendar.DATE)的目的是“获取日的最大值”。综合所有的日期,得出一个月最多有31天。因此,getMaximum(Calendar.DATE)的返回值是31。getActualMaximum() 获取的“当前日期时该字段的最大值”。例如,当日期为2013-09-01时,getActualMaximum(Calendar.DATE)是获取“日的最大值”是30。当前日期是9月份,而9月只有30天。因此,getActualMaximum(Calendar.DATE)的返回值是30。
    (2)Calendar.HOUR_OF_DAY使用24进制。Calendar.HOUR使用12进制。

    Calendar设置时间的常见方法

    Calendar的set()方法

    set(int field, int value)是用来设置"年/月/日/小时/分钟/秒/微秒"等值
    set(int year, int month, int day, int hour, int minute, int second) 但没有
    set(int year, int month, int day, int hour, int minute, int second, int millisecond) 
    前面set(int,int,int,int,int,int)方法不会自动将MilliSecond清为0。

    另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
    calendar.set(Calendar.MONTH, 7);

    Calendar对象的容错性(Lenient设置)

    我们知道特定的月份有不同的日期,当一个用户给出错误的日期时,Calendar 如何处理的呢?

     1 public class Test
     2 {
     3     public static void main(String[] args) throws Exception
     4     {
     5         Calendar cal = Calendar.getInstance();
     6         cal.set(2000, 1, 32, 0, 0, 0);
     7         System.out.println(cal.getTime());
     8         cal.setLenient(false);
     9         cal.set(2000, 1, 32, 0, 0, 0);
    10         System.out.println(cal.getTime());
    11     }
    12 }

    执行结果为:
    Fri Mar 03 00:00:00 CST 2000
    Exception in thread "main" java.lang.IllegalArgumentException: DAY_OF_MONTH
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2316)
        at java.util.Calendar.updateTime(Calendar.java:2260)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1044)
        at java.util.Calendar.getTime(Calendar.java:1017)
        at Test.main(Test.java:27)
    当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。

    Calendar 与 Date 的转换

    Calendar calendar = Calendar.getInstance();
    // 从一个Calendar对象中获取Date对象
    Date date = calendar.getTime();
    // 将 Date 对象反应到一个 Calendar 对象中,
    // Calendar/GregorianCalendar没有构造函数可以接受Date对象,所以我们必需先获得一个实例,然后设置Date 对象
    calendar.setTime(date);

     

    声明: 本文由金丝燕网原创编译,转载请保留链接: Calender的使用详解

  • 相关阅读:
    SpringBoot 整合Shiro
    Shiro 学习
    SpringBoot 整合security、thymeleaf
    【SpringBoot__Mybatis】整合MyBatis 配置文件版2
    SpringBoot 配置Druid数据源及监控
    lombok 使用
    thymeleaf 常用
    随机模块
    md5加密
    python正则
  • 原文地址:https://www.cnblogs.com/ys-wuhan/p/5778751.html
Copyright © 2020-2023  润新知