时间类Calendar
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:%02d\n",c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.SECOND));
}
}
如果喜欢我写的文章的话可以关注我,我会继续更新蓝桥杯Java的一些必备知识的