Java 日历

Java 日历

java.util.Date 类可以用于获取一个日期对象

但如果我们想要设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢?

java.util.Calendar 类提供了这些功能

Calendar 类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用 getInstance 方法创建即可

创建一个代表系统当前日期的 Calendar 对象

Calendar c = Calendar.getInstance();//默认是当前日期

创建一个指定日期的 Calendar 对象

使用 getInstance() 方法获取了一个 Calendar 对象后,我们就可以使用 set() 方法设置一个特定的日期

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

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 星期几

Calendar 类实例信息的设置

1. set() 方法

set() 方法原型如下

public final void set(int year,int month,int date)

调用方式

Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12); // 设置 c1 的年月日为:2009、6、12

如果只设定某个字段,例如日期的值,则可以使用如下 set 方法

public void set(int field,int value)

把 c1 对象代表的日期设置为10号,其它所有的数值会被重新计算

c1.set(Calendar.DATE,10);

把 c1 对象代表的年份设置为2008年,其他的所有数值会被重新计算

c1.set(Calendar.YEAR,2008);

2. add() 方法

add() 与 set() 方法类似

把 c1 对象的日期加上 10,也就是 c1 也就表示为 10 天后的日期,其它所有的数值会被重新计算

Calendar c1 = Calendar.getInstance();
c1.add(Calendar.DATE, 10);

把 c1 对象的日期减去 10,也就是 c1 也就表示为 10 天前的日期,其它所有的数值会被重新计算

Calendar c1 = Calendar.getInstance();
c1.add(Calendar.DATE, -10);

获取 Calendar 类对象信息

Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar类

Calendar 类实现了公历日历

GregorianCalendar 是 Calendar 类的一个具体实现

Calendar 的 getInstance()方法返回一个默认用当前的语言环境和时区初始化的 GregorianCalendar 对象

GregorianCalendar 定义了两个字段:AD 和 BC,表示公历定义的两个时代

下表列出了 GregorianCalendar 对象的几个构造方法

序号 构造函数和说明
1 GregorianCalendar()在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar
2 GregorianCalendar(int year, int month, int date)在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar
3 GregorianCalendar(int year, int month, int date, int hour, int minute)为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar
4 GregorianCalendar(int year, int month, int date, int hour, int minute, int second)为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar
5 GregorianCalendar(Locale aLocale)在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar
6 GregorianCalendar(TimeZone zone)在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar
7 GregorianCalendar(TimeZone zone, Locale aLocale)在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar

下表则列出了 GregorianCalendar 类提供的一些有用的方法

序号 方法和说明
1 void add(int field, int amount)根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中
2 protected void computeFields()转换 UTC 毫秒值为时间域值
3 protected void computeTime()覆盖Calendar ,转换时间域值为UTC毫秒值
4 boolean equals(Object obj)比较此 GregorianCalendar 与指定的 Object
5 int get(int field)获取指定字段的时间值
6 int getActualMaximum(int field)返回当前日期,给定字段的最大值
7 int getActualMinimum(int field)返回当前日期,给定字段的最小值
8 int getGreatestMinimum(int field)返回此 GregorianCalendar 实例给定日历字段的最高的最小值
9 Date getGregorianChange()获得格里高利历的更改日期
10 int getLeastMaximum(int field)返回此 GregorianCalendar 实例给定日历字段的最低的最大值
11 int getMaximum(int field)返回此 GregorianCalendar 实例的给定日历字段的最大值
12 Date getTime()获取日历当前时间
13 long getTimeInMillis()获取用长整型表示的日历的当前时间
14 TimeZone getTimeZone()获取时区
15 int getMinimum(int field)返回给定字段的最小值
16 int hashCode()重写 hashCode
17 boolean isLeapYear(int year)确定给定的年份是否为闰年
18 void roll(int field, boolean up)在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段
19 void set(int field, int value)用给定的值设置时间字段
20 void set(int year, int month, int date)设置年、月、日的值
21 void set(int year, int month, int date, int hour, int minute)设置年、月、日、小时、分钟的值
22 void set(int year, int month, int date, int hour, int minute, int second)设置年、月、日、小时、分钟、秒的值
23 void setGregorianChange(Date date)设置 GregorianCalendar 的更改日期
24 void setTime(Date date)用给定的日期设置Calendar的当前时间
25 void setTimeInMillis(long millis)用给定的long型毫秒数设置Calendar的当前时间
26 void setTimeZone(TimeZone value)
用给定时区值设置当前时区
27 String toString()
返回代表日历的字符串

范例

下面的范例演示了部分方法的使用

<pre style="box-sizing: border-box; overflow: hidden; font-family: monospace, monospace; font-size: 1em; margin-top: 0px; margin-bottom: 0px; overflow-wrap: break-word !important; display: block; border-radius: 2px; color: rgb(77, 77, 77); white-space: pre-wrap !important; padding: 10px;">import java.util.*;

public class GregorianCalendarDemo {

public static void main(String args[]) {
String months[] = {
"Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"};

  int year;
  // 初始化 Gregorian 日历
  // 使用当前时间和日期
  // 默认为本地时间和时区
  GregorianCalendar gcalendar = new GregorianCalendar();
  // 显示当前时间和日期的信息
  System.out.print("Date: ");
  System.out.print(months[gcalendar.get(Calendar.MONTH)]);
  System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
  System.out.println(year = gcalendar.get(Calendar.YEAR));
  System.out.print("Time: ");
  System.out.print(gcalendar.get(Calendar.HOUR) + ":");
  System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
  System.out.println(gcalendar.get(Calendar.SECOND));

  // 测试当前年份是否为闰年
  if(gcalendar.isLeapYear(year)) {
     System.out.println("当前年份是闰年");
  }
  else {
     System.out.println("当前年份不是闰年");
  }

}
}
</pre>

运行范例 »

以上实例编译运行结果如下:

<pre style="box-sizing: border-box; overflow: hidden; font-family: monospace, monospace; font-size: 1em; margin-top: 0px; margin-bottom: 0px; overflow-wrap: break-word !important; display: block; border-radius: 2px; color: rgb(77, 77, 77); white-space: pre-wrap !important; padding: 10px;">Date: Jan 23 2018
Time: 8:35:44
当前年份不是闰年
</pre>

Calender 类的完整方法列表,可以访问我们的 Java 文档

← Java 日期时间Java 正则表达式 →

Java 基础教程

<nav style="box-sizing: border-box; display: block;">Java 基础教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本数据类型Java 常量Java 基本数据类型Java 变量类型Java 访问控制符Java 非访问修饰符Java 运算符Java 条件判断Java 条件之 if 语句Java 条件之 if...else 语句Java 条件之 if...else if 语句Java 条件之嵌套 if 语句Java 条件之 switch 语句Java 循环语句Java 循环之 while 语句Java 循环之 do...while 语句Java 循环之 for 语句Java break 语句Java continue 语句Java Number 类Java Math 类Java Character 类Java String 类Java StringBuffer 和 StringBuilder 类Java 数组Java 日期时间Java 日历Java 正则表达式Java 方法Java 流 ( Stream )Java Scanner 类Java 读写文件Java 目录操作方法Java 异常处理Java 源文件声明规则Java 继承Java 重写 ( Override )Java 重载 ( Overload )Java 多态Java 抽象类Java 封装Java 接口Java 包 ( package )Java 数据结构Java 集合框架Java 泛型Java 序列化Java Socket 编程Java URL 处理Java 发送邮件Java 多线程编程Java Applet 基础Java 文档注释Java 范例Java 8 新特性Java MySQL 连接</nav>

</main>

♥ 简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • /** * 得到当前月的上一个月,返回2016-06这样的字符串 */ public stat...
    可爱傻妞是我的爱阅读 667评论 0赞 0
  • 最近项目中用到自定义日历组件,找来找去,最后发现GitHub的material-calendarview这个项目最...
    colin2017阅读 1,700评论 0赞 0
  • Data类 Java.util包提供了Data类来封装当前的日期和时间。它有2个构造函数: public Date...
    ThreeGold阅读 657评论 0赞 4
  • 自从JDK 1.0开始,Java就提供了Date来处理时间和日期,作为老古董自然有很多东西是过时的。然后出现了Ca...
    湫水长天阅读 2,194评论 0赞 16
  • 1.付出不亚于任何人的努力 2.要谦虚,不要骄傲 3.要每天反省 4.活着,就要感谢 5.积善行,思利他 6.不要...
    frank_you阅读 288评论 0赞 1

友情链接更多精彩内容