Calendar用法

简介:

from:http://www.jssay.com/blog/index.php/2010/08/25/jdk学习笔记之 calendar用法/

当我们需要处理时间问题的时候,我们首先想到的是Date类型,然而熟悉Date API的人一定都知道,这个类的许多方法都被废弃了,取而代之的是Calendar类,Calendar的中文意思是“日历”,因此用他来处理时间问题, 也算是实至名归了,下面是我对Calendar的一些理解,不足之处请指正。 

一.Calendar是一个抽象类,不能直接New一个实例,可以有两种方法得到它的实例: 
方法一:Calendar cal = new GregorianCalendar(); //GregorianCalendar是Calendar的实现类, 
方法二:Calendar cal = Calendar.getInstance(); 
通过以上方法获得的实例,默认都是当前日期。我们可以通过以下代码验证一下: 

//此时是2010年8月25日15时18分18秒

Java代码
  1. Calendar cal = Calendar.getInstance();   
  2. System.out.println("DAY_OF_WEEK: "+cal.get(Calendar.DAY_OF_WEEK));   
  3. System.out.println("DAY_OF_MONTH: "+cal.get(Calendar.DAY_OF_MONTH));   
  4. System.out.println("DAY_OF_YEAR: "+cal.get(Calendar.DAY_OF_YEAR));   
  5. System.out.println("YEAR: "+cal.get(Calendar.YEAR));   
  6. System.out.println("MONTH: "+cal.get(Calendar.MONTH));   
  7. System.out.println("HOUR_OF_DAY : "+cal.get(Calendar.HOUR_OF_DAY));   
  8. System.out.println("MINUTE : "+cal.get(Calendar.MINUTE)); System.out.println("SECOND : "+cal.get(Calendar.SECOND));  



得到的结果如下: 
DAY_OF_WEEK: 4 
DAY_OF_MONTH: 25 
DAY_OF_YEAR: 237 
YEAR: 2010 
MONTH: 7 
HOUR_OF_DAY : 15 
MINUTE : 18 
SECOND : 18 

注意: 
DAY_OF_WEEK表示星期几。从星期日开始到星期六为一个周期,数字表示依次为:1,2,3……7。 
MONTH的表示是从数字0开始,所以月份应该是该数字+1. 

二. 很多情况下,我们需要进行时间的计算,如:将某个时间向前推几小时、几天、几个月等。这个时候我们就需要对Calendar设定一个时间值。 

我们有几种常见的设置方法: 
方法一:setTime(Date date) 

方法二: 
set(int field, int value) 

方法三: 
set(int year, int month, int date) 
set(int year, int month, int date, int hourOfDay, int minute) 
set(int year, int month, int date, int hourOfDay, int minute, int second) 

方法四:setTimeInMillis(long millis) 

在进行时间运算的时候,我们经常会用到如下方法: 
add(int field, int amount) 

示例代码: 

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, 1); 
System.out.println(cal.getTime()); 

结果如下: 
Thu Aug 26 15:49:03 CST 2010 

以上是将时间向后推,如果要向前推,将第二个参数(amount)改成负数即可。 

三. 另外,Calendar还提供几个非常好用的日期比较函数: 
after(Object when) 
before(Object when) 
equals(Object when) 
compareTo(Calendar anotherCalendar) 

需要注意的是:上面的Object参数类型必须是Calendar的实例(instance),否则就没有意义了。示例代码:

Java代码
  1. Calendar cal = Calendar.getInstance();   
  2. Calendar cal2 = Calendar.getInstance();   
  3.   
  4. cal2.setTimeInMillis(1282023123371L);   
  5.   
  6. System.out.println("Date1: " + cal.getTime());   
  7. System.out.println("Date2: " + cal2.getTime());   
  8.   
  9. System.out.println("Date1 is later than Date2: " + cal.after(cal2));   
  10. System.out.println("Date1 is earlier than Date2: " + cal.before(cal2));   
  11. System.out.println("Date1 equals Date2: " + cal.equals(cal2));   
  12. System.out.println("Date1 compare to Date2: " + cal.compareTo(cal2));  



运行结果为: 
Date1: Wed Aug 25 16:18:07 CST 2010 
Date2: Tue Aug 17 13:32:03 CST 2010 
Date1 is later than Date2: true 
Date1 is earlier than Date2: false 
Date1 equals Date2: false 
Date1 compare to Date2: 1 

compareTo()函数的返回值有三个:0 1 -1,分别表示相等、大于(表示第一个时间离现在较近)、小于(表示第一个时间离现在较远)。 

四. 总结 
相比Date类型,Calendar显得更加灵活和强大。掌握Calendar的用法必将为你的开发之路打下良好的基础。更多详情请查阅JDK1.5帮助 文档。

相关文章
|
机器学习/深度学习 数据采集 TensorFlow
智能市场营销策略优化:使用Python实现深度学习模型
【10月更文挑战第1天】 智能市场营销策略优化:使用Python实现深度学习模型
457 63
|
10月前
|
安全 搜索推荐 网络安全
外贸网站应该如何搭建?
建立优质的外贸网站需要进行需求分析、域名选择、SSL证书部署、建站产品选择、便利性和响应式设计以及高质量内容SEO优化。选择合适的模板、部署SSL证书和高质量内容是关键。建站门槛低,节省成本,同时提升用户体验和搜索引擎可见性。
323 2
|
Java Spring 容器
Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
1127 3
|
JavaScript Linux
2022年超详细在CentOS 7上安装Node.js方法(源码安装)
这篇文章介绍了在CentOS 7系统上通过源码安装Node.js的详细步骤,包括从官网下载Node.js源码包、将安装包上传至虚拟机、解压安装包、删除压缩文件、编译安装Node.js、检查Node.js和npm版本,以及切换npm源到淘宝镜像以加速下载。此外,还提供了一个获取Linux下Node.js离线安装包的微信公众号搜索方式。
|
人工智能 小程序 前端开发
毕业设计|基于NODE+VUE的校园跑腿平台系统
毕业设计|基于NODE+VUE的校园跑腿平台系统
233 0
|
弹性计算 前端开发 小程序
阿里云ECS服务器搭建SpringBoot后端接驳微信小程序前端使用心得
在阿里云搭建SpringBoot后端,碰到服务器端口无法访问的问题,客服予以解决,希望发表给大家带来一些参考。
|
机器学习/深度学习 算法 计算机视觉
一张图的一百种 “活” 法 | MMClassification 数据增强介绍第二弹
既然数据增强手段能够提高模型的泛化能力,那么我们自然希望通过一系列数据增强的组合获得最优的泛化效果,从而衍生出了一系列组合增强手段,这里我们介绍其中最著名也最常用的两个手段,AutoAugment 和 RandAugment。
1132 0
一张图的一百种 “活” 法 | MMClassification 数据增强介绍第二弹
|
网络协议 Linux 开发工具
Linux - 修改Cent OS系统的的hostname、配置DNS映射
Linux - 修改Cent OS系统的的hostname、配置DNS映射目录 1 修改方式2 扩展: 配置DNS映射本篇文章中, 示例设计到的操作系统是CentOS 6.5. 1 修改方式① 命令hostname onepiece —— 运行后设置立即生效, 但要在打开新的会话窗口才能看到效果;...
2463 0
|
Web App开发 安全 测试技术
|
缓存 应用服务中间件 nginx
nginx请求体读取
上节说到nginx核心本身不会主动读取请求体,这个工作是交给请求处理阶段的模块来做,但是nginx核心提供了ngx_http_read_client_request_body()接口来读取请求体,另外还提供了一个丢弃请求体的接口-ngx_http_discard_request_body(),在请求执行的各个阶段中,任何一个阶段的模块如果对请求体感兴趣或者希望丢掉客户端发过来的请求体,可以分别调用这两个接口来完成。
1467 0

热门文章

最新文章