calendar日期操作

什么是Calendar 类

  Calendar 类是一个抽象类,它为特定瞬间与 YEAR 、 MONTH 、 DAY_OF—MONTH 、 HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。
        创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个getInstance() 方法来获得 Calendar 类的对象。 getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化

Calendar日期获取,设置,加减

创建一个日历对象
获取当前年份,月份,日期等…..
设置指定年份,月份,日期等…..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Calendar calendar=Calendar.getInstance();//创建一个日历对象
int year=calendar.get(calendar.YEAR);//获取当前年份
System.out.println("获取当前年份:"+year);

int month=calendar.get(calendar.MONTH)+1;//获取月份
System.out.println("获取月份:"+month);

int date=calendar.get(calendar.DATE);//获取日期
System.out.println("获取日期:"+date);

int huor=calendar.get(calendar.HOUR);//获取时
System.out.println("获取时:"+huor);

int hous=calendar.get(calendar.HOUR_OF_DAY);//获取时的24小时制
System.out.println("获取时的24小时制:"+hous);

//将给定的日历字段设置为给定的值
calendar.set(calendar.YEAR,2034);//设置指定年份
int year2=calendar.get(calendar.YEAR);//获取设置指定年份
System.out.println("获取设置指定年份:"+year2);

calendar.set(calendar.MONTH,5);//设置指定月份
int month2=calendar.get(calendar.MONTH);//获取设置的指定月份
System.out.println("获取设置的指定月份:"+month2);

calendar.set(calendar.DATE,5);//设置指定日子
int date2=calendar.get(calendar.DATE);//获取指定日
System.out.println("获取指定日:"+date2);

Calendar年份增加两年

Calendar月份减少三月

1
2
3
4
5
6
//        根据日历规则,为给定的日历字段添加或者减去指定的事件量
calendar.add(calendar.YEAR,2);//把年份增加两年
calendar.add(calendar.MONTH,-3);//把月份减少三年
int yuer=calendar.get(calendar.YEAR);
int month3=calendar.get(calendar.MONTH);
System.out.println(yuer+"年"+month3+"月"+date+"日");

LocalDateTime日期获取,设置,加减

1
2
3
LocalDate只能设置仅含年月日的格式
LocalTime只能设置仅含时分秒的格式
LocalDateTime可以设置含年月日时分秒的格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LocalDateTime lo=LocalDateTime.now();// 创建一个表示当前日期和时间的对象
System.out.println("当前日期时间:"+lo);

LocalDate loc=LocalDate.now();//获取当前日期
System.out.println("获取当前日期:"+loc);
LocalTime ltim=LocalTime.now();//获取当前时间
System.out.println("获取当前时间:"+ltim);

LocalDate lo2=LocalDate.of(2016,2,3);//指定日期
System.out.println(":指定日期:"+lo2);
LocalTime yim=LocalTime.of(7,33,20);//指定时间
System.out.println("指定时间:"+yim);
LocalDateTime lotime=LocalDateTime.of(2015,3,22,11,43,34);
System.out.println("指定日期时间:"+lotime);
LocalDateTime日期时间的加减
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//        LocalDateTime日期时间的加减
LocalDateTime lotim=LocalDateTime.now();//获取当前日期
LocalDateTime plusYesar=lotim.plusYears(2L);//年份加2
LocalDateTime plusMonth=lotim.plusMonths(3L);//月份加3
LocalDateTime plusDays=lotim.plusDays(7L);//日+7
LocalDateTime plusHour=lotim.plusHours(4L);//小时+4
LocalDateTime plusMIn=lotim.plusMinutes(10);//分钟+10
LocalDateTime plusScon=lotim.plusSeconds(10L);//秒+10
System.out.println("\n\n当前时间:"+lotim);
System.out.println("当前时间+2年后的时间是:"+plusYesar);
System.out.println("当前月份+3:"+plusMonth);
System.out.println("当前时间日+7:"+plusDays);
System.out.println("当前时间小时+4:"+plusHour);
System.out.println("当前时间分钟+10:"+plusMIn);
System.out.println("当前时间秒+10:"+plusScon);
当前时间基础上,指定本年当中的第几天
1
2
3
4
5
6
7
8
9
10
11
LocalDate loDate=LocalDate.now();//获取当前时间
//当前时间基础上,指定本年当中的第几天
LocalDate with=loDate.withDayOfYear(200);//获取当前年份的第200天
LocalDate moth=loDate.withDayOfMonth(5);//获取当前月份的第几天
LocalDate year=loDate.withYear(2025);//指定年份
LocalDate mon=loDate.withMonth(3);//指定月份
System.out.println("\n\n当前时间:"+loDate);
System.out.println("指定当前年份的第200天:"+with);
System.out.println("当前月份的第5天:"+moth);
System.out.println("指定年份:"+year);
System.out.println("指定月份:"+mon);
获取日期的年月日周时分秒
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//        获取日期的年月日周时分秒
LocalDateTime lodatm=LocalDateTime.now();
int dayYear=lodatm.getDayOfYear();
int dayMonth=lodatm.getDayOfMonth();
DayOfWeek dayofweek=lodatm.getDayOfWeek();
System.out.println("\n\n今天是:"+lodatm+"\n" +
"本年当中的第"+dayYear+"天\n" +
"本月当中的第"+dayMonth+"天\n" +
"本周中的星期"+dayofweek.getValue()+"及"+dayofweek+"\n");

//获取当天时间的年月日时分秒
int year2=lodatm.getYear();
Month month2=lodatm.getMonth();
int day=lodatm.getDayOfMonth();
int hour=lodatm.getHour();
int minute=lodatm.getMinute();
int secound=lodatm.getSecond();
System.out.println("\n\n今天是:"+lodatm+"\n年:"+year2+"\n月:"+month2.getValue()+"\n" +
"日:"+day+"\n时:"+hour+"\n分:"+minute+"\n秒:"+secound);

时间日期前后的比较与判断
1
2
3
4
5
6

// 时间日期前后的比较与判断
LocalDate loda1=LocalDate.of(2017,7,7);
LocalDate loda2=LocalDate.of(2019,9,9);
boolean dateisb=loda1.isBefore(loda2);
System.out.println("\n\n 时间日期前后的比较与判断:"+dateisb);
1
2
3
4
计算时间、日期间隔
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔
计算俩个日期的间隔-年月日
1
2
3
4
5
6
7
8
9
10
11
12
13
LocalDate date1=LocalDate.of(2018,3,3);
LocalDate date2=LocalDate.of(2023,6,6);
Period per=Period.between(date1,date2);
System.out.println("相差年数:"+per.getYears());
System.out.println("相差月份:"+per.getMonths());
System.out.println("相差日数:"+per.getDays());

System.out.println("\n===================================");
long years=per.get(ChronoUnit.YEARS);
long month=per.get(ChronoUnit.MONTHS);
long days=per.get(ChronoUnit.DAYS);
System.out.println("相差的年月日分别为:"+years+"-"+month+"-"+days);

1
2
获取时间间隔,并不是单词的年月日数字的加减,而是计算出具体相差多少天
计算俩个时间的间隔
1
2
3
4
5
6
System.out.println("\n\n=======================");
LocalDateTime da1=LocalDateTime.now();
LocalDateTime da2=LocalDateTime.of(2022,2,2,22,30,10);
Duration du=Duration.between(da1,da2);
System.out.println(da1+"和"+da2+"间隔\n"+du.toDays()+"天"+du.toHours()+"小时"+du.toMinutes()+"分钟" +
du.toMillis()+"毫秒"+du.toNanos()+"纳秒");

类型转换时间戳

1
2
3
4
将Instant对象转换为时间戳
将LocalDateTime对象转换为时间戳
将Date对象转换为时间戳
使用Calendar将日期转换为时间戳(两种方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 Instant ins=Instant.now();
System.out.println("\n\n当前时间:"+ins);//2023-11-17T03:11:11.336552200Z

// 将Instant对象转换为时间戳
long insTime=Instant.now().toEpochMilli();
System.out.println("Instant时间戳:"+insTime);


Date date=Date.from(ins);
Instant instant=date.toInstant();
System.out.println(instant);


//将LocalDateTime对象转换为时间戳
long loTime=lo.toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println("LocalDateTime时间戳:"+loTime);

//将Date对象转换为时间戳
Date date4=new Date();
long dateTime=date4.getTime();
System.out.println("Date时间戳:"+dateTime);


long calTime=calendar.getTimeInMillis();//第一种方法
System.out.println("Calendar时间戳1:"+calTime);
System.out.println("Calendar时间戳2:"+calendar.getTime().getTime());//第二种方法


自定义转化

1
2
3
4
5
自定义格式
自定义转化的格式一定要与日期类型对应
LocalDate只能设置仅含年月日的格式
LocalTime只能设置仅含时分秒的格式
LocalDateTime可以设置含年月日时分秒的格式
1
2
3
4
5
6
7
8
9
10
LocalDateTime date=LocalDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String dateStr=formatter.format(date);
System.out.println(dateStr);//2023年11月17日

DateTimeFormatter formatter1=DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println(formatter1.format(LocalDate.now()));//2023-11-17

DateTimeFormatter formatter2=DateTimeFormatter.ofPattern("HH:mm:ss");//时分秒
System.out.println(formatter2.format(LocalTime.now()));//16:49:48
1
2
将时间字符串形式转化为日期对象
格式的写法必须与字符串的形式一样
1
2
3
4
String datetim="2023-11-12 12:32:20";
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt=LocalDateTime.parse(datetim,dtf);
System.out.println(ldt);