zoukankan      html  css  js  c++  java
  • 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; 

  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2637885.html
Copyright © 2011-2022 走看看