博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Calendar详解
阅读量:6481 次
发布时间:2019-06-23

本文共 3478 字,大约阅读时间需要 11 分钟。

 究竟什么是一个 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://klfuo.baihongyu.com/

你可能感兴趣的文章
ImageOptim-无损图片压缩Mac版
查看>>
12 Go语言map底层浅析
查看>>
vue-resumer 项目中 element-ui 遇到的 textarea autosize 问题
查看>>
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
JavaScript函数(二)
查看>>
Airbnb改进部署管道安全性,规范部署顺序
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
当我们谈性能的时候,我们实际上在谈什么?
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>