Java Calendar 类的使用(日期处理二)
在JAVA中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar 类完成。其中,Date 类主要封装了系统的日期和时间的信息,Calendar 类则会根据系统的日历来解释 Date 对象。下面详细介绍Calendar 类的具体使用。
Calendar 类
Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。
创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。
Calendar c = Calendar.getInstance();
当创建了一个 Calendar 对象后,就可以通过 Calendar 对象中的一些方法来处理日期、时间。Calendar 类的常用方法如下表所示。
方法 | 描述 |
---|---|
void add(int field, int amount) | 根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount |
boolean after(Object when) | 判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果 |
boolean before(Object when) | 判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果 |
void clear() | 清空 Calendar 中的日期时间值 |
int compareTo(Calendar anotherCalendar) |
比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0 |
int get(int field) | 返回指定日历字段的值 |
int getActualMaximum(int field) | 返回指定日历字段可能拥有的最大值 |
int getActualMinimum(int field) | 返回指定日历字段可能拥有的最小值 |
int getFirstDayOfWeek() | 获取一星期的第一天。根据不同的国家地区,返回不同的值 |
static Calendar getInstance() | 使用默认时区和语言坏境获得一个日历 |
static Calendar getInstance(TimeZone zone) | 使用指定时区和默认语言环境获得一个日历 |
static Calendar getInstance(TimeZone zone, Locale aLocale) |
使用指定时区和语言环境获得一个日历 |
Date getTime() |
返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象 |
long getTimeInMillis() | 返回此 Calendar 的时间值,以毫秒为单位 |
void set(int field, int value) | 为指定的日历字段设置给定值 |
void set(int year, int month, int date) | 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) |
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值 |
void setFirstDayOfWeek(int value) | 设置一星期的第一天是哪一天 |
void setTimeInMillis(long millis) | 用给定的 long 值设置此 Calendar 的当前时间值 |
Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。
Calendar 类中定义了许多常量,分别表示不同的意义。
- Calendar.YEAR:年份。
- Calendar.MONTH:月份。
- Calendar.DATE:日期。
- Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
- Calendar.HOUR:12小时制的小时。
- Calendar.HOUR_OF_DAY:24 小时制的小时。
- Calendar.MINUTE:分钟。
- Calendar.SECOND:秒。
- Calendar.DAY_OF_WEEK:星期几。
例如,要获取当前月份可用如下代码:
int month = Calendar.getInstance().get(Calendar.MONTH);
如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。
使用 Calendar 类处理日期时间的实例如下:
Calendar calendar = Calendar.getInstance(); // 如果不设置时间,则默认为当前时间
calendar.setTime(new Date()); // 将系统当前时间赋值给 Calendar 对象
System.out.println("现在时刻:" + calendar.getTime()); // 获取当前时间
int year = calendar.get(Calendar.YEAR); // 获取当前年份
System.out.println("现在是" + year + "年");
int month = calendar.get(Calendar.MONTH) + 1; // 获取当前月份(月份从 0 开始,所以加 1)
System.out.print(month + "月");
int day = calendar.get(Calendar.DATE); // 获取日
System.out.print(day + "日");
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 获取今天星期几(以星期日为第一天)
System.out.print("星期" + week);
int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时数(24 小时制)
System.out.print(hour + "时");
int minute = calendar.get(Calendar.MINUTE); // 获取当前分钟
System.out.print(minute + "分");
int second = calendar.get(Calendar.SECOND); // 获取当前秒数
System.out.print(second + "秒");
int millisecond = calendar.get(Calendar.MILLISECOND); // 获取毫秒数
System.out.print(millisecond + "毫秒");
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
System.out.println("今天是本月的第 " + dayOfMonth + " 天");
int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); // 获取今天是本月第几周
System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");
int many = calendar.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
System.out.println("今天是今年第 " + many + " 天");
Calendar c = Calendar.getInstance();
c.set(2012, 8, 8); // 设置年月日,时分秒将默认采用当前值
System.out.println("设置日期为 2012-8-8 后的时间:" + c.getTime()); // 输出时间
上面的示例代码演示了 Calendar 类中的方法与常量的结合使用,从而完成处理日期的操作。
例 1
下面使用 Calendar 类来实现日历的打印功能,代码实现如下:
import java.util.Calendar;public class CalendarDemo {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(2016, 5, 1); // 实际的calendar对象所表示的日期为2016年6月1日// 判断2016年6月1日为一周中的第几天int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;char[] title = { '日', '一', '二', '三', '四', '五', '六' }; // 存放曰历的头部int daysArray[][] = new int[6][7];// 存放日历的数据int daysInMonth = 31; // 该月的天数int day = 1; // 自动增长for (int i = index; i < 7; i++) {// 填充第一周的日期数据,即日历中的第一行daysArray[0][i] = day++;}for (int i = 1; i < 6; i++) {// 填充其他周的日历数据,控制行for (int j = 0; j < 7; j++) {// 如果当前day表示的是本月最后一天,则停止向数组中继续赋值if (day > daysInMonth) {i = 6;break;}daysArray[i][j] = day++;}}System.out.println("------------------2016 年 6 月--------------------\n");for (int i = 0; i < title.length; i++) {System.out.print(title[i] + "\t");}System.out.print("\n");// 输出二元数组daysArray中的元素for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (daysArray[i][j] == 0) {if (i != 0) {// 如果到月末,则完成显示日历的任务,停止该方法的执行return;}System.out.print("\t");continue;}System.out.print(daysArray[i][j] + "\t");}System.out.print("\n");}}
}
该程序看似复杂其实很简单。因为 Calendar 类所表示的时间月份是 set() 方法中表示月份的参数值 +1,因此 Calendar 类的实际时间为 2016 年 6 月 1 日。在下面的代码中分别获取 6 月 1 日为本周中的第几天,以便在相应的星期下开始输出 6 月份的日历。
程序中的 daysArray 是一个二元数组,该二元数组控制了日历的格式输出,第一个子数组控制日历的行,第二个子数组控制曰历的列,即可输出二元数组中的每一个元素。
运行程序,执行结果如下所示。
------------------2016 年 6 月--------------------日 一 二 三 四 五 六1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Java推荐学习视频
Java基础:
Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受
Java项目:
【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏
【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发
Java Calendar 类的使用(日期处理二)相关推荐
- 利用Java Calendar类打印日历
利用Java Calendar类打印日历 说到日历,我们接触的就多了,每天都在和日历打交道,每年家里都会买日历.那么,大家知道如何用Java打印日历呢?在这里,我说一下如何用Calendar类打印日历 ...
- Java - Calendar对于特殊夏令营日期的处理(防止采坑)
Java - Calendar对于特殊夏令营日期的处理(防止采坑) 背景 Demo 背景 1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间 ...
- Java常用类之【日期相关类】
一.日期类 Java语言提供了2个类来处理日期 Date类 Date类以毫秒来表示特定的日期构造方法Date date = new Date();System.out.println(date); 获 ...
- Java Calendar类 练习题:为孙工找到当月休息日
Java Calendar 练习题:为孙工找到当月休息日 题目 难点分析 怎么进行格式化输出,达到图中的展示效果? 制表符:\t System.out.printf("%-8s", ...
- 【_ 記 】Java Calendar类详解(今年 本月 今日 去年 上月 昨日)
一.构造方法 protected Calendar() :由于修饰符是protected,所以无法直接创建该对象.需要通过别的途径生成该对象. 二.成员方法 Calendar类的成员方法 static ...
- java calendar格式化_Java:日期时间转换与格式化
Java:日期时间转换与格式化 2020-08-12 21:28:58 一.Java中时间类 1.Date类 Date常用的构造函数: Date()生成一个代表当前日期时间的Date对象,相当于Dat ...
- Java Calendar 类的时间操作
Java Calendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/ ...
- Java Calendar类知识点总结
(1)Calendar类在java.util包中,使用Calendar类的static方法getInstance()可以初始化一个日历对象,如:Calendar calendar=Calendar.g ...
- Java Calendar 类的格式操作
Java Calendar 类时间操作,这也许是创建日历和管理最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 注意事项: Calendar 的 month 从 0 ...
最新文章
- ASP.NET协作应用集成到trsids身份验证服务器的开发流程
- DCMTK:使用dcmsr API创建示例结构化报告
- 数据库中存储过程和触发器有什么异同?
- (12)VHDL组合逻辑
- Sublime Text 3使用技巧总结--快捷键及常用插件
- 3G牌照发放脚步渐近 三大运营商提速布局3G
- 慎用PHP的unset、array_unique方法
- 数仓建模—ID Mapping(下)
- Hexo写博客时的图片问题
- 亲测可用--word报错:子过程或函数未定义
- oracle 日期的常用写法
- Ubuntu / Linux 手动安装Paraview
- 第二银河消息窗口 彩色字体,超大字体实现方法
- CVE-2022-39227jwt伪造
- thinkphp集成银联网关支付简单实例
- 万春总与无线院深圳管理干部沟通交流纪要
- 小羊驼和你一起学习cocos2d-x之三(进度条、CCProgressTimer)
- Android闪闪发光字体Shimmer效果
- Automatic Plugin -WordPress自动采集插件 v3.56.0
- 虚拟机与主机互传文件方法分享