Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的偏移量。
Calendar的基本使用方法如下所示:
Calendar c = Calendar.getInstance(); //生成一个新的Calendar类 c.set(2022, 3, 24, 10, 10, 10); //set(int year, int month, int date, int hourOfDay, int minute, int second) cal.set(Calendar.YEAR, 2022); //set(int field, int value) 将给定的日历字段设置为给定的值 System.out.println(c.get(Calendar.YEAR)); //输出当前年 System.out.println(c.get(Calendar.MONTH)); //输出当前月 System.out.println(c.get(Calendar.DATE)); //输出当前日 System.out.println(c.get(Calendar.DAY_OF_WEEK)); //输出当前的星期 System.out.println(c.get(Calendar.HOUR_OF_DAY)); //输出当前小时 System.out.println(c.get(Calendar.MINUTE)); //输出当前分钟 System.out.println(c.get(Calendar.SECOND)); //输出当前秒数 System.out.println(c.getTimeInMillis()); //输出当前时间戳 System.out.println(c.getTime()); //输出的是一个Date对象,表示当前的日期
如果我们相对当前生成的Calendar类进行一个日期的加或减,那么我们可以有以下的两种操作方法
c.setTimeInMillis(1L); //设置时间戳 c.add(Calendar.MINUTE, 1); //add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段。 //add的值可以为负数 cal.set(Calendar.YEAR, 2022); //set(int field, int value) 将给定的日历字段设置为给定的值
Calendar的set和get常用的字段有:
static int AM AM字段表示12小时制的当前小时 static int AM_PM AM_PM字段表示24小时制的当前小时 static int DATE DATE字段编号表示该月的日期。 static int DAY_OF_MonTH get字段编号和 set本月的日期。 static int DAY_OF_WEEK get字段编号和 set表示一周中的日期。 static int DAY_OF_WEEK_IN_MonTH get字段编号和 set当月的 set几的序号。 static int DAY_OF_YEAR get和 set字段编号, set本年度的日数。 static int HOUR get和 set字段编号, get上午或下午的小时。 static int HOUR_OF_DAY get字段编号和 set当天的小时数。 static int MILLISECOND get和 set字段号表示 get内的 set数。 static int MINUTE get和 set字段编号表示小时内的分钟。 static int MonDAY DAY_OF_WEEK字段的值表示星期一。 static int MonTH get和 set字段号表示月份。 static int PM AM_PM字段的值表示从中午到午夜之前的一天中的一段时间。 static int SATURDAY DAY_OF_WEEK字段的值表示星期六。 static int SECOND get和 set字段编号表示分钟内的第二个。 static int SEPTEMBER MONTH字段的值代表了 公历和朱利安日历中的第九个月。 protected long time 这个日历的当前设定时间,以1970年1月1日,格林尼治标准时间0:00:00之后的毫秒表示。 static int WEEK_OF_MonTH get和 set字段编号, set当月的周数。 static int WEEK_OF_YEAR get和 set字段编号, set本年度的周数。 static int YEAR get现场编号和 set表示年份。注意事项:
月份不是从1开始,而是从0开始的,也就是说1月的表示数字为0
星期日表示的数字为1,星期六的表示数字为7
Calendar c = Calendar.getInstance(); c.set(2022, 2, 27, 10, 10, 10); System.out.println(c.get(Calendar.DAY_OF_WEEK)); System.out.println(c.getTime());
Calendar c = Calendar.getInstance(); c.set(2022, 2, 27, 10, 10, 10); System.out.println(c.get(Calendar.DAY_OF_WEEK)); System.out.println(c.getTime());
设置时间戳的时候如果想得到中国的时间(就是你要用的)那么就要减掉8个小时,具体为什么我也不知道。
Calendar c = Calendar.getInstance(); c.setTimeInMillis(0L); System.out.println(c.getTime());
有了Calendar这个类,我们做一些日期处理的题的时候就会十分顺利,下面引入一道真题,如下所示:
真题链接
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
long t = s.nextLong();
long offset = 8 * 60 * 60 * 1000; //这里要减掉8个小时
t -= offset;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(t);
System.out.printf("%02d:%02d:%02dn",c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.SECOND));
}
}
如果喜欢我写的文章的话可以关注我,我会继续更新蓝桥杯Java的一些必备知识的



