Calendar详解

 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?

    比如:
    月份的定义 - 阳(公)历 一年12 个月,每个月的天数各不同;
    阴(农)历,每个月固定28天;
    每周的第一天 - 阳(公)历星期日是第一天;阴(农)历,星期一是第一天;

    实际上,在历史上有着许多种纪元的方法。它们的差异实在太大了,比如说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就 是"Gregorian Calendar"。也就是我们在讲述年份时常用 "公元几几年"。Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。

Java 本身提供了对 "Gregorian Calendar" 规则的实现。我们从 Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一致)。

1 Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现
例子1:
public static void main(String[] args) throws ParseException{  
        Calendar calendar = Calendar.getInstance();
        //在java中可以使用instanceof关键字判断一个对象到底是那个类的实例
        if (calendar instanceof GregorianCalendar)
        System.out.println("calendar is an instance of GregorianCalendar");
        }


2 Calendar 与 Date 直接的转换非常简单:
     Calendar calendar = Calendar.getInstance();
     // 从一个 Calendar 对象中获取 Date 对象
     java.util.Date date = (java.util.Date) calendar.getTime();
     // 将 Date 对象反应到一个 Calendar 对象中,
     // Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象
     // 所以我们必需先获得一个实例,然后设置 Date 对象
     calendar.setTime(date);


3 实例:
Calendar cal = Calendar.getInstance();

     //当前年
         int year = cal.get(Calendar.YEAR);
         //当前月
         int month = (cal.get(Calendar.MONTH))+1;
         //当前月的第几天:即当前日
         int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
         //当前时:HOUR_OF_DAY-24小时制;HOUR-12小时制
         int hour = cal.get(Calendar.HOUR_OF_DAY);
         //当前分
         int minute = cal.get(Calendar.MINUTE);
         //当前秒
         int second = cal.get(Calendar.SECOND);
         //0-上午;1-下午
         int ampm = cal.get(Calendar.AM_PM);
         //当前年的第几周
         int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
         //当前月的第几周
         int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);
         //当前年的第几天
         int day_of_year = cal.get(Calendar.DAY_OF_YEAR);
         System.out.println(year+"-"+month+"-"+day_of_month+" "+hour+":"+minute+":"+second+"--【0-上午;1-下午】:"+ampm+"--【当前年的第几 周】:"+week_of_year+"--【当前月的第几周】:"+week_of_month+"--【当前年的第几 天】:"+day_of_year);


4 实例:

Calendar calendar=Calendar.getInstance();
         System.out.println("现在时间是:"+new Date());
         String year=String.valueOf(calendar.get(Calendar.YEAR));
         String month=String.valueOf(calendar.get(Calendar.MONTH)+1);
         String day=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
         String week=String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)-1);
         System.out.println("现在时间是:"+year+"年"+month+"月"+day+"日,星期"+week);
         long year2009=calendar.getTimeInMillis();
         calendar.set(1989,9,26);//这里与真实的月份之间相差1
         long year1989=calendar.getTimeInMillis();
         long days=(year2009-year1989)/(1000*60*60*24);
         System.out.println("今天和1989年10月26日相隔"+days+"天,"+"也就是说我在这个美丽的星球上已经幸福的生活了"+days+"天。");


5 实例:
Calendar cal1 = Calendar.getInstance();
         Date date=new Date();
         cal1.setTime(date);//cal1.setTime(new Date());
         Calendar cal2 = Calendar.getInstance();
         cal2.setTime(date);
         System.out.println(cal1.get(Calendar.YEAR)-cal2.get(Calendar.YEAR));
         System.out.println(cal1.get(Calendar.MONTH)-cal2.get(Calendar.MONTH));
         System.out.println(cal1.get(Calendar.MONTH));
         System.out.println(cal1.get(Calendar.YEAR));
         System.out.println(cal1.get(Calendar.MONTH)-cal2.get(Calendar.YEAR));

6 实例
// 判断当前日期是星期几<br> 
 // @param pTime 修要判断的时间<br> 
 //@return dayForWeek 判断结果<br> 
 // @Exception 发生异常<br>   
public static int dayForWeek(String pTime) throws Exception { 
   format = new SimpleDateFormat("yyyy-MM-dd"); 
   Calendar c = Calendar.getInstance(); 
   c.setTime(format.parse(pTime)); 
   int dayForWeek = 0; 
   if(c.get(Calendar.DAY_OF_WEEK) == 1){ 
     dayForWeek = 7; 
   }else{ 
     dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1; 
   } 
   return dayForWeek; 

原文地址:https://www.cnblogs.com/xingmeng/p/2637885.html