Calendar类
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时、只需要使用getInstance方法创建即可。
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
常量 | 描述 |
---|---|
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类对象信息的设置
Set设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
其他字段属性set的意义以此类推
Add设置
Calendar c1 = Calendar.getInstance();
把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
其他字段属性的add的意义以此类推
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);// 获得秒 int day = c1.get(Calendar.DAY_OF_WEEK);// 获得星期几
(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。
GregorianCalendar 类提供的一些有用的方法:
void add(int field, int amount) :根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。
boolean equals(Object obj) :比较此 GregorianCalendar 与指定的 Object。
int get(int field) :获取指定字段的时间值
int getActualMaximum(int field) :返回当前日期,给定字段的最大值
int getActualMinimum(int field) :返回当前日期,给定字段的最小值
int getGreatestMinimum(int field) :返回此 GregorianCalendar 实例给定日历字段的最高的最小值。
int getLeastMaximum(int field) :返回此 GregorianCalendar 实例给定日历字段的最低的最大值
int getMaximum(int field) :返回此 GregorianCalendar 实例的给定日历字段的最大值。
Date getTime():获取日历当前时间。
long getTimeInMillis() :获取用长整型表示的日历的当前时间
TimeZone getTimeZone() :获取时区。
int getMinimum(int field) :返回给定字段的最小值。
boolean isLeapYear(int year):确定给定的年份是否为闰年。
void roll(int field, boolean up) :在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
void set(int field, int value) :用给定的值设置时间字段。
void set(int year, int month, int date) :设置年、月、日的值。
void set(int year, int month, int date, int hour, int minute) :设置年、月、日、小时、分钟的值。
void set(int year, int month, int date, int hour, int minute, int second) :设置年、月、日、小时、分钟、秒的值。
void setGregorianChange(Date date) :设置 GregorianCalendar 的更改日期。
void setTime(Date date) :用给定的日期设置Calendar的当前时间。
void setTimeInMillis(long millis) :用给定的long型毫秒数设置Calendar的当前时间。
void setTimeZone(TimeZone value) :用给定时区值设置当前时区。
String toString() :返回代表日历的字符串。
实例
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("当前年份不是闰年");
}
}
}
参考资料:https://www.w3cschool.cn/java/java-date-time.html