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; 

  • 相关阅读:
    MySQL — 优化之explain执行计划详解(转)
    项目中常用的MySQL 优化
    通过 MySQL 存储原理来分析排序和锁(转)
    java内存模型(转)
    数据库索引的创建原则
    MySQL中的几种日志了解
    一条SQL语句在MySQL中如何执行的
    SQL
    SQL
    SqlServer性能优化 查询和索引优化(十二)
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2637885.html
Copyright © 2011-2022 走看看