Java Calendar 是时间操作类,Calendar 抽象类定义了足够的方法,在某一特定的瞬间或日历上,提供年、月、日、小时之间的转换提供方法
一、获取具体时间信息
1. 当前时间
获取此刻时间的年月日时分秒
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2023年2月28日
2. 指定时间
使用自定义时间或者某个请求中的时间
a)使用date类
//查看源码可以发现,year= year + 1900,month = month + 1
Date date = new Date(123, 1, 28,14,28,0);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2023年2月28日
b)使用calendar类
Calendar calendar = Calendar.getInstance();
calendar.set(2023,2,28,14,36,0);
int year = calendar.get(Calendar.YEAR);
//这里指定了月份,所以不需要+1
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2023年2月28日
二、指定偏移量时间
可以指定出任意一段时间
//当前时间2023-2-28
Calendar calendar = Calendar.getInstance();
//3年前
calendar.add(Calendar.YEAR, -3);
//2月后
calendar.add(Calendar.MONTH, +2);
//7天后(默认每个月30天)
calendar.add(Calendar.DAY_OF_YEAR, 7);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2020年4月5日
三、时区使用
可以设置时区
Calendar calendar = Calendar.getInstance();
//表示东一区
TimeZone timeZone = TimeZone.getTimeZone("GMT+1");
calendar.setTimeZone(timeZone);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
System.out.println(year + "年" + month + "月" + day + "日" + hour + "时");
//输出时间2023年2月28日7时(当前时间2023年2月28日14时)
//表示西一区
TimeZone timeZone = TimeZone.getTimeZone("GMT-1");
//输出时间2023年2月28日5时(当前时间2023年2月28日14时)
//互联网时间
TimeZone timeZone = TimeZone.getTimeZone("GMT");
//输出时间2023年2月28日6时(当前时间2023年2月28日14时)
四、Calendar类中的静态常量
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 当前时间为多少号(日历式的多少号) |
Calendar.HOUR | 小时(12小时制) |
Calendar.HOUR_OF_DAY | 小时(24小时制) |
Calendar.MINUTE | 分钟数 |
Calendar.SECOND | 秒数 |
Calendar.MILLENSECOND | 毫秒数 |
Calendar.WEEK_OF_MONTH | 当前时间是所在月的第几个星期(日历式的第几周) |
Calendar.WEEK_OF_YEAR | 当前时间是所在当前年的第几个星期 |
Calendar.DAY_OF_WEEK_IN_MONTH | 当前时间是所在月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周 |
Calendar.DAY_OF_WEEK | 一周七天中,当前时间是一周中的第几天(星期天为第一天) |
Calendar.DAY_OF_YEAR | 一年中的第几天 |
Calendar.DAY_OF_MONTH | 一个月中的第几天,结果等同于Calendar.DATE |
Calendar.AM_PM | 上午还是下午(0表示上午,1表示下午) |
五、Calendar类中的常用方法
方法 | 描述 |
---|---|
Calendar getInstance | 获得一个日历对象(重要) |
Date getTime | 返回当前时间 |
long getTimeInMillis | 返回当前时间毫秒值 |
void setTimeInMillis(long millis) | 用毫秒值设置Calendar的时间 |
int get(int field) | 获得给定时间域的值(如:Calendar.DATE) |
void set(int field, int value) | 用给定的值设置时间域 |
void clear() | 清除所有的时间域 |
void clear(int field) | 清除指定时间域的值 |
set(int year, int month,int date,int hour,int minute,int second) | 设置年、月、日、时、分、秒域的数值 |
void complete() | 填充时间域列表中所有未设置的域 |
boolean equals(Object obj) | 比较该日历和指定的对象 |
boolean before(Object when) | 比较时间域大小 |
boolean after(Object when) | 比较时间域大小 |
void add(int field,int amount) | 将指定 ( 带符号的 ) 数量的时间添加到给定的时间域 |
void roll(int field,boolean up) | 在给定的时间域上 ( 向上true / 向下false ) 滚动一个时间单元 |
void setTimeZone(TimeZone value) | 用给定的时区值设置时区 |
TimeZone getTimeZone() | 获得当前时区 |
void setMinimalDaysInFirstWeek(int value) | 设置该年中第一个星期所需要的最少的天数。例如,如果定义第一个星期包含一年第一个月的第一天,用值 1 调用该方法。如果它必须是一个完整的星期,使用 7 调用该方法 |
int getMinimalDaysInFirstWeek() | 原理同上 |
int getMinimum(int field) | 获得给定时间域最小值,如对于DAY_OF_MONTH最小值为1(1号) |
int getMaximum(int field) | 获得给定时间域最大值,如对于DAY_OF_MONTH最小值为31(31号) |
String toString() | 返回日历的字符串表示 |
六、Calendar转化为Date
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dateFormat.format(date));
注意项:
\color{red}{注意项:}
注意项:
month 是从0开始的,也就是全年月份是0 ~ 11;
DAY_OF_WEEK 是从星期天开始的,也就是星期一是2,星期二是3。。。