Java中LocalDate、Calendar、Date类型进行加减

2023-12-27 10:49:44

1. Calendar类回顾

CalendarJava中常用的时间处理工具之一,它提供了很多日历类型常见方法,下面是一些常用的方法及对应的代码和运行结果。Calendar是一个抽象类, 无法通过直接实例化得到对象。它为特定瞬间与一组诸如YEARMONTHDAY_OF_MONTHHOUR等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。Calendar英文含义为日历、挂历、日程表。

1.1. 如何创建Calendar日历对象

Calendar提供了一个方法getInstance(),来获得一个Calendar对象,得到的Calendar由当前时间初始化。

代码举例:

Calendar cal=Calendar.getInstance();//默认当前时间

1.2. 获取时间

get(int field)通过传入上述的静态属性可以获取对应的年月日星期。

	@Test
	public void testCalendar(){
		Calendar calendar = Calendar.getInstance();
		//获取年份
		System.out.println("年:"+calendar.get(Calendar.YEAR));
		//月份默认从0开始,需要加1
		System.out.println("月:"+(calendar.get(Calendar.MONTH) + 1));
		//获取日期
		System.out.println("日:"+calendar.get(Calendar.DAY_OF_MONTH));
		//获取小时
		System.out.println("时:"+calendar.get(Calendar.HOUR_OF_DAY));
		//获取分钟
		System.out.println("分:"+calendar.get(Calendar.MINUTE));
		//获取秒
		System.out.println("秒:"+calendar.get(Calendar.SECOND));
		//获取当前时间是星期几,1表示星期天,2表示星期一,以此类推,7表示星期六
		System.out.println("星期:"+calendar.get(Calendar.DAY_OF_WEEK));
	}

运行结果:

在这里插入图片描述

1.3. 设置时间

set(int field , int value)方法通过传入上述的静态属性(第一个参数)来设置对应的值(第二个参数)

一次性设置时间,代码举例:

	@Test
	public void testCalendar02(){
		Calendar calendar = Calendar.getInstance();
		//一次性设置年月日时分秒
		calendar.set(2023,11,25,19,30,00);
		System.out.println(calendar.getTime());
	}

运行结果:

在这里插入图片描述

单独设置时间,代码举例:

	@Test
	public void testCalendar03(){
		Calendar calendar = Calendar.getInstance();
		//设置年份
		calendar.set(Calendar.YEAR,2023);
		//设置月份,由于月份下标从0开始 所以赋值月份要-1
		calendar.set(Calendar.MONTH,11);
		//设置日期
		calendar.set(Calendar.DAY_OF_MONTH,24);
		//设置小时
		calendar.set(Calendar.HOUR_OF_DAY,20);
		//设置分钟
		calendar.set(Calendar.MINUTE,30);
		//设置秒
		calendar.set(Calendar.SECOND,30);
		//将星期设置为星期天
		calendar.set(Calendar.DAY_OF_WEEK,1);
		System.out.println(calendar.getTime());
	}

运行结果:

在这里插入图片描述

1.4. Calendar与Date之间的转换

  • Calendar转换为Date对象:
Date date = calendar.getTime();
  • Date对象转换为Calendar
Date date = new Date();
calendar.setTime(date);

2. LocalDateCalendarDate类型进行加减

2.1. LocalDate类型加减

以下是LocalDate类进行日期加减:

	@Test
	public void testLocalDate(){
		//获取当前日期
		LocalDate currentDate = LocalDate.now();
		System.out.println("当前日期是: " + currentDate);

		//加上10天
		LocalDate tenDaysLater = currentDate.plusDays(10);
		System.out.println("加上10天后的日期是: " + tenDaysLater);

		//减去2个月
		LocalDate twoMonthsAgo = currentDate.minus(2, ChronoUnit.MONTHS);
		System.out.println("减去2个月后的日期是: " + twoMonthsAgo);

	}

运行结果:

在这里插入图片描述

可以看到,使用LocalDate类进行加减操作代码比较简洁清晰,也更易读易懂。

2.2. Calendar加减

Java中的Calendar类提供了许多方法用于对日期和时间进行加减操作。以下是一些常用的方法:

add(int field, int amount): 对指定字段加上或减去指定的时间量,如Calendar.YEARCalendar.MONTHCalendar.DATE等。

例如,下面的代码将当前日期上进行加减:

	@Test
	public void testDateCalculator(){
		// 获取当前日期
		Calendar calendar = Calendar.getInstance();
		System.out.println("当前日期:" + calendar.getTime());

		// 加上3天
		calendar.add(Calendar.DATE, 3);
		System.out.println("加上3天后:" + calendar.getTime());

		// 减去1个月,需要注意的是,由于Calendar类的月份从0开始,因此加减月份时需要注意月份的计算。
		calendar.add(Calendar.MONTH, -1);
		System.out.println("减去1个月后:" + calendar.getTime());

		// 加上2年
		calendar.add(Calendar.YEAR, 2);
		System.out.println("加上2年后:" + calendar.getTime());
	}

输出结果:

在这里插入图片描述

2.3. Date类型加减

Date类型在java 8中已经废弃,需要转换为Calendar类型进行加减。

转换Calendar类加减时间:

	@Test
	public void testDateDemo(){
		// 创建Calendar对象
		Calendar calendar = Calendar.getInstance();
		//创建Date类型默认时间
		Date date = new Date();
		System.out.println("加减前的日期:"+date);
		//将Date类型转换为Calendar类型
		calendar.setTime(date);
		// 加上一小时
		calendar.add(Calendar.HOUR_OF_DAY, 1);
		// 减去一天
		calendar.add(Calendar.DAY_OF_MONTH, -1);
		// 获取加减后的日期
		date = calendar.getTime();
		System.out.println("加减后的日期:"+date);
	}

运行结果:

在这里插入图片描述

在这个例子中,我们使用了Calendar类进行日期的加减操作。我们首先创建了一个Calendar对象,并通过setTime()方法设置日期,然后使用add()方法加减日期,最后使用getTime()方法获取加减后的日期。

值得注意的是,Calendar类中有很多常量可以用来表示不同的时间单位,如HOUR_OF_DAY代表小时,DAY_OF_MONTH代表日,等等。

总的来说,使用Date类和Calendar类进行日期加减操作是非常灵活和方便的。

文章来源:https://blog.csdn.net/qq_37726813/article/details/135185553
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。