Calendar和GregorianCalendar简介

Calendar的中文翻译是日历,实际上,在历史上有着许多种计时的方法。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就是"Gregorian Calendar"。也就是我们在讲述年份时常用"公元**年"。Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。Calendar.getInstance()中所获得的实例就是一个"GreogrianCalendar"对象。

Calendar获取时间的常见方法

import java.util.Calendar;
public class Test
{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
//比当前月份少1
int month = cal.get(Calendar.MONTH);
//date表示日期,day表示天数,所以date与day_of_month相同
int date = cal.get(Calendar.DATE);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
//表示本周的第几天,从周日开始计算
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
//12小时制
int hour = cal.get(Calendar.HOUR);
//24小时制
int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int millisecond = cal.get(Calendar.MILLISECOND);
int maxDate = cal.getActualMaximum(Calendar.DATE);
System.out.println("现在的年份为:" + year);
System.out.println("现在的月份为:" + month);
System.out.println("现在的号为:" + date);
System.out.println("现在的号为:" + dayOfMonth);
System.out.println("现在是星期:" + dayOfWeek);
System.out.println("现在过了的天数为:" + dayOfYear);
System.out.println("现在几点:" + hour);
System.out.println("现在几点:" + hourOfDay);
System.out.println("现在几分:" + minute);
System.out.println("现在几秒:" + second);
System.out.println("现在几毫秒:" + millisecond);
System.out.println("本月最后一天是:" + maxDate);
}
}

补充说明:
(1)注意getActualMaximum()和getMaximum()的区别。getMaximum()获取的“字段最大值”,是指在综合所有的日期,在所有这些日期中得出的“字段最大值”。例如getMaximum(Calendar.DATE)的目的是“获取日的最大值”。综合所有的日期,得出一个月最多有31天。因此,getMaximum(Calendar.DATE)的返回值是31。getActualMaximum() 获取的“当前日期时该字段的最大值”。例如,当日期为2013-09-01时,getActualMaximum(Calendar.DATE)是获取“日的最大值”是30。当前日期是9月份,而9月只有30天。因此,getActualMaximum(Calendar.DATE)的返回值是30。
(2)Calendar.HOUR_OF_DAY使用24进制。Calendar.HOUR使用12进制。

Calendar设置时间的常见方法

Calendar的set()方法

set(int field, int value)是用来设置"年/月/日/小时/分钟/秒/微秒"等值
set(int year, int month, int day, int hour, int minute, int second) 但没有
set(int year, int month, int day, int hour, int minute, int second, int millisecond) 
前面set(int,int,int,int,int,int)方法不会自动将MilliSecond清为0。

另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
calendar.set(Calendar.MONTH, 7);

Calendar对象的容错性(Lenient设置)

我们知道特定的月份有不同的日期,当一个用户给出错误的日期时,Calendar 如何处理的呢?

 public class Test
{
public static void main(String[] args) throws Exception
{
Calendar cal = Calendar.getInstance();
cal.set(2000, 1, 32, 0, 0, 0);
System.out.println(cal.getTime());
cal.setLenient(false);
cal.set(2000, 1, 32, 0, 0, 0);
System.out.println(cal.getTime());
}
}

执行结果为:
Fri Mar 03 00:00:00 CST 2000
Exception in thread "main" java.lang.IllegalArgumentException: DAY_OF_MONTH
    at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2316)
    at java.util.Calendar.updateTime(Calendar.java:2260)
    at java.util.Calendar.getTimeInMillis(Calendar.java:1044)
    at java.util.Calendar.getTime(Calendar.java:1017)
    at Test.main(Test.java:27)
当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。

Calendar 与 Date 的转换

Calendar calendar = Calendar.getInstance();
// 从一个Calendar对象中获取Date对象
Date date = calendar.getTime();
// 将 Date 对象反应到一个 Calendar 对象中,
// Calendar/GregorianCalendar没有构造函数可以接受Date对象,所以我们必需先获得一个实例,然后设置Date 对象
calendar.setTime(date);

 

声明: 本文由金丝燕网原创编译,转载请保留链接: Calender的使用详解

Calender的使用详解的更多相关文章

  1. Java Calender 类详解

    一.   如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar ...

  2. java中Calender类的详细用法(详解)

    一. 如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar对象 ...

  3. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  4. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  5. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  6. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  7. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  8. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  9. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

随机推荐

  1. Unity3D 实现简单的语音聊天 [iOS版本]

    现在很多手机游戏中的聊天系统都加入语音聊天的功能,相比于传统的文字聊天,语音聊天在MMORPG中显得尤为重要,毕竟直接口头交流总比你码字快得多了,也更直观些. 实现语音聊天的方法很多,U3D中有不少第 ...

  2. uva 839 not so mobile——yhx

    Not so Mobile  Before being an ubiquous communications gadget, a mobile was just a structure made of ...

  3. C之五子棋

    #include <stdio.h> #include <stdlib.h> #define N 15 ][N + ] = { }; ; void initGame(void) ...

  4. Linux (二) vi

    1  步骤 1)  vi  test.txt 进入一般模式 2)   i    进入编辑模式,输入内容 3)  Esc 回到一般模式 4)  :wq 存储后退出 2  编辑模式 [i] 光标处插入, ...

  5. leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?

    Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 ...

  6. UESTC 887 方伯伯的儿童节 --树形DP

    定义: 1.dp[u][1]表示u这个点设立糖果发放点且u这棵子树满足条件时的最少糖果点数 2.dp[u][0]表示u这个点不设立发放点且u这棵子树满足条件时的最少糖果点数 设v1,v2……vn为u的 ...

  7. tomcat配置jenkins遇到的问题

    在执行jenkinks时,遇到以下错误: 原因:未在tomcat/conf中的tomcat-users.xml中配置用户 解决方法:在tomcat/conf/tomcat-users.xml中添加以下 ...

  8. 开坑,Unix环境高级编程,转行之路又得缓缓了

    不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下, C语法基本熟练,过去 ...

  9. JS框架之收集专帖

    1.KNOCKOUT.JS 官网:http://knockoutjs.com/ 学习:http://www.cnblogs.com/TomXu/archive/2011/11/21/2257154.h ...

  10. 分享JS代码(转)

    var imgUrl = 'http://xxx/share_ico.png'; // 分享后展示的一张图片 var lineLink = 'http://xxx'; // 点击分享后跳转的页面地址 ...