Java Calendar类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/83995591

相关文章
Java Calendar类
Java SimpleDateFormat类
Java Formatter类

1. Calendar初始化

Calendar calendar = Calendar.getInstance();

默认是调用GregorianCalendar实例返回,在GregorianCalendar的构造函数中,设置为当前时间

public GregorianCalendar(TimeZone zone, Locale aLocale) {
    super(zone, aLocale);
    gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
    setTimeInMillis(System.currentTimeMillis());
}

2. 设置时间

Calendar可以通过Date对象或者时间戳来设置时间。

setTime(Date date) // Date对象
setTimeInMillis(long millis) // 毫秒

Calendar也可以通过设置年/月/日/小时/分钟/秒来设置时间。

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)

Calendar还可以通过设置特定领域来设置时间。

set(int field, int value)

常用的field有

字段 含义
YEAR
MONTH
DATE
HOUR_OF_DAY 小时
MINUTE 分钟
SECOND

set方法采取延缓计算的方法

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.APRIL); // 设置为4月
calendar.set(Calendar.DATE, 31); // 4月31日,如果没有下面的设置,会自动转换成5月1日
calendar.set(Calendar.MONTH, Calendar.JULY); // 7月31日

3. 获取时间

Calendar可以获取Date对象和时间戳。

getTime() // Date对象
getTimeInMillis() // 毫秒

Calendar也可以通过特定领域来获取时间。

get(int field)

除了上面的常用field,还有

字段 含义
HOUR 小时(12进制)
DAY_OF_YEAR 今年第几天
DAY_OF_WEEK 星期几
WEEK_OF_MONTH 这个月第几周
WEEK_OF_YEAR 今年第几周

4. 其他方法

getActualXXX方法返回当前时间的最大或最小值,而getXXX方法则返回所有数据的最大或最小值。

getActualMaximum(int field)
getActualMinimum(int field)
getMaximum(int field)
getMinimum(int field)

例如在4月份返回最大天数,getActualMaximum返回30,而getMaximum返回31。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.APRIL);
System.out.println(calendar.getMaximum(Calendar.DATE)); // 31
System.out.println(calendar.getActualMaximum(Calendar.DATE)); // 30

add方法增加某个领域的值, 负值为减少

add(int field, int amount)

如果是3月31日,增加到4月份,会自动修改日期。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.MARCH);
calendar.set(Calendar.DATE, 31); // 2018-03-31
calendar.add(Calendar.MONTH, 1); // 2018-04-30
calendar.add(Calendar.MONTH, 12); // 2019-04-30

5. 注意点

Calendar中星期是从周日开始计算的

public final static int SUNDAY = 1;
public final static int MONDAY = 2;
public final static int TUESDAY = 3;
public final static int WEDNESDAY = 4;
public final static int THURSDAY = 5;
public final static int FRIDAY = 6;
public final static int SATURDAY = 7;

而Calendar中月份是从0开始的。

public final static int JANUARY = 0;
public final static int FEBRUARY = 1;
public final static int MARCH = 2;
public final static int APRIL = 3;
public final static int MAY = 4;
public final static int JUNE = 5;
public final static int JULY = 6;
public final static int AUGUST = 7;
public final static int SEPTEMBER = 8;
public final static int OCTOBER = 9;
public final static int NOVEMBER = 10;
public final static int DECEMBER = 11;

6. 日期格式化

Calendar calendar = Calendar.getInstance();
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime())

参考资料:http://blog.csdn.net/zerogotosum/article/details/1671314
参考资料:http://outofmemory.cn/code-snippet/979/Java-Calendar-Date-usage-summary

猜你喜欢

转载自blog.csdn.net/chennai1101/article/details/83995591