JDK8-DateApi(LocalDate、LocalTime、LocalDateTime...)

  在Java8之前,处理日期时间的类是Date、Calendar,这两个在使用起来总是让人感觉不是很舒服,在设计上面有一些缺陷,并且java.util.Date和SimpleDateFormatter都不是线程安全的. 作为JDK1.8 推出的LocalDate、LocalTime、LocalDateTime这个三个时间处理类,主要用来弥补之前的日期时间类的不足,简化日期时间的操作. 在格式化操作方面,也推出了一个新的格式化类DateTimeFormatter。

除此之外,java.time包中了就提供了不少强大的日期和时间API,如下:

  • 本地日期和时间类(业务常用,重点):LocalDateTime(日期和时间),LocalDate(日期),LocalTime(时间)
  • 带时区的日期和时间类:ZonedDateTime
  • 时刻类:Instant
  • 时间间隔:Duration

LocalDate

@Test
public void testLocalDate() {
	// 获取今天的日期
    LocalDate today = LocalDate.now();
    System.out.println("获取今天的日期 = " + today);
    // 构造日期LocalDate(严格按照yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式 )
    LocalDate localDate = LocalDate.parse("2023-02-01");
    System.out.println("将String类型日期格式化成LocalDate类型 = " + localDate);
    // 将LocalDate格式化成字符串
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String text = today.format(formatters);
    System.out.println("将LocalDate格式化成字符串 = " + text);

    // 今天是几号
    int dayUfMonth = today.getDayOfMonth();
    System.out.println("今天是几号 = " + dayUfMonth);
    // 今天是周几(返回的是个枚举类型,需要再getValue())
    int dayOfWeek = today.getDayOfWeek().getValue();
    System.out.println("今天是周几 = " + dayOfWeek);
    // 今天是今年中的第几天
    int dayOfYear = today.getDayOfYear();
    System.out.println("今天是今年中的第几天 = " + dayOfYear);
    // 获取当前月份
    int value = today.getMonth().getValue();
    System.out.println("今天是第几月 = " + value);
    // 获取当前年份
    int year = today.getYear();
    System.out.println("当前年份 = " + year);
    // 判断当前年份是否是闰年
    boolean leapYear = today.isLeapYear();
    System.out.println("是否是闰年 = " + leapYear);
    // 判断当月有几天
    int length = today.getMonth().length(leapYear);
    System.out.println("当月有几天 = " + length);
    // 获取当天开始时间(获取的是年月日类型的)【转换成日期时间后,时间是00:00】
    LocalDateTime localDateTime = today.atStartOfDay();
    System.out.println("获取当天开始时间 = " + localDateTime);
    // 设置当前月份的指定天数的日期
    LocalDate dayOfMonth = today.withDayOfMonth(3);
    System.out.println("当前月份的指定天数的日期 = " + dayOfMonth);
    // 设置当前年份指定天数的日期
    LocalDate dayOfYear1 = today.withDayOfYear(115);
    System.out.println("当前年份指定天数的日期 = " + dayOfYear1);
    // 当前日期向后推几天
    LocalDate plusDays = today.plusDays(4);
    System.out.println("当前日期向后推4天 = " + plusDays);
    // 当前日期向前推几天
    LocalDate minusDays = today.minusDays(4);
    System.out.println("当前日期向前推4天 = " + minusDays);
    // 当前日期向后推几个时间单位
    LocalDate plusWeeks = today.plus(4, ChronoUnit.WEEKS);
    System.out.println("当前日期向后推4个星期 = " + plusWeeks);

    // 取本月第1天:
    LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth());
    System.out.println("本月第1天 = " + firstDayOfThisMonth);
    // 取本月第2天:
    LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
    System.out.println("本月第2天 = " + secondDayOfThisMonth);
    // 取本月最后一天,再也不用计算是28,29,30还是31:
    LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
    System.out.println("本月最后一天 = " + lastDayOfThisMonth);
    // 取下一天:
    LocalDate firstDayOfNextMonth = lastDayOfThisMonth.plusDays(1);
    System.out.println("本月最后一天的下一天 = " + firstDayOfNextMonth);
    // 取2023年2月第一个周一:
    LocalDate firstMondayOf2023= LocalDate.parse("2023-02-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
    System.out.println("2023年2月第一个周一 = " + firstMondayOf2023);
}

LocalTime

	@Test
	public void testLocalTime() {
		// 获取当前时间
		LocalTime localTime = LocalTime.now();
		System.out.println("当前时间 = " + localTime);  //16:45:10.764
		// 构造时间
		LocalTime zero = LocalTime.of(0, 0, 0);
		System.out.println("构造时间方法1 = " + zero);
		LocalTime mid = LocalTime.parse("12:00:00");
		System.out.println("构造时间方法2 = " + mid);

		// 获取当前时间分钟数
		int minute = localTime.getMinute();
		System.out.println("当前时间分钟数 = " + minute);
		// 当前时间向后推指定分钟数
		LocalTime plusMinutes = localTime.plusMinutes(10);
		System.out.println("当前时间向后推10分钟 = " + plusMinutes);
		// 当前时间向后增加几个时间单位
		LocalTime plusUnit = localTime.plus(1, ChronoUnit.MINUTES);
		System.out.println("前时间向后增加1分钟 = " + plusUnit);
		// 根据指定的单位计算到另一个时间为止的时间量
		long until = localTime.until(mid, ChronoUnit.HOURS);
		System.out.println("当前时间到12点的时间差(小时) = " + until);
		// 判断此时间是否在指定时间之后。
		boolean after = localTime.isAfter(mid);
		System.out.println("当前时间是否在12时之后 = " + after);
		// 判断此时间和指定时间大小(大:1, 等于:0, 小于:-1)
		int i = localTime.compareTo(mid);
		System.out.println("当前时间和12时进行比较 = " + i);
	}

LocalDateTime

	@Test
	public void testLocalDateTime() {
		// 获取当前年月日时分秒信息(时期)
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println("当前年月日时分秒 = " + localDateTime);  //2023-02-01T17:43:23.105, 这里的表示分隔符, 将日期和时间分开
		// 转换成LocalDate和LocalTime
		LocalDate localDate = localDateTime.toLocalDate();
		LocalTime localTime = localDateTime.toLocalTime();
		// 当前LocalDateTime时间转指定格式字符串*
		String localDateTimeStr = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
		System.out.println("当前时间转指定格式字符串 = " + localDateTimeStr);
		// 将字符串转换成LocalDateTime*
		DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
		LocalDateTime parse = LocalDateTime.parse(localDateTimeStr, df);
		System.out.println("当字符串转换成时间 = " + parse);
		// 将localDateTime转换成Date
		Date from = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
		System.out.println("将localDateTime转换成Date = " + from);
		// 将Date转换成将localDateTime转换成Date
		LocalDateTime ldt = Instant.ofEpochMilli(from.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
		System.out.println("将Date转换成将localDateTime转换成Date = " + ldt);

		// 获取当前日期相关api
		DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
		System.out.println("当前是周几 = " + dayOfWeek);  //WEDNESDAY
		// 获取当前时间相关api
		int hour = localDateTime.getHour();
		System.out.println("获取当前小时 = " + hour);
		// 当前时期几天后的时间
		LocalDateTime plusDays = localDateTime.plusDays(1);
		System.out.println("当前时期一天后的时间 = " + plusDays);
		// 当前时期是否在指定时期之后
		boolean after = localDateTime.isAfter(ldt);
		System.out.println("当前时期是否在指定时期之后 = " + after);
		// 指定当前减去几小时
		LocalDateTime minusHours= localDateTime.minusHours(2);
		System.out.println("指定当前减去2小时 = " + minusHours);
	}

日期时间工具类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值