Calendar详解

原创
2012/12/25 17:56
阅读数 152

究竟什么是一个 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; 

粘贴自:http://www.cnblogs.com/xingmeng/archive/2012/08/14/2637885.html

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部