用LocalDateTime、LocalDate、LocalTime代替Date

用LocalDateTime、LocalDate、LocalTime代替Date

一. LocalDate

LocalDate类只会获取到年、月、日。

@Test
public void testLocalDate() {
    // 获取当前年月日
    LocalDate localDate = LocalDate.now();
    // 构造指定的年月日
    LocalDate.of(2021, 9, 1);
    // toString() 打印字符串类型的日期,默认yyyy-MM-dd
    System.out.println(localDate.toString());
    // 获取年份的两种方式
    int year = localDate.getYear();
    int y1 = localDate.get(ChronoField.YEAR);
    System.out.println("当前年份:" + year);

    // 获取月份的两种方式
    int month = localDate.getMonth().getValue();
    int month1 = localDate.get(ChronoField.MONTH_OF_YEAR);
    System.out.println("当前月份:" + month1);

    // 获取日期天的两种方式
    int day = localDate.getDayOfMonth();
    int day1 = localDate.get(ChronoField.DAY_OF_MONTH);
    System.out.println("当前月份:" + day);

    int dayOfWeek = localDate.getDayOfWeek().getValue();
    int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK);
    System.out.println("当前星期" + dayOfWeek1);

	// 本月第一天日期
    LocalDate first = localDate.with(TemporalAdjusters.firstDayOfMonth());
    // 本月最后一天日期
    LocalDate end = localDate.with(TemporalAdjusters.lastDayOfMonth());
    // 获取前一天的日期、年、月
    LocalDate data  = localDate.plusDays(-1);
    LocalDate d  = localDate.plusMonths(-1);
    LocalDate dd  = localDate.plusYears(-1);
    // 获取后一天的日期
    LocalDate data2  = localDate.plusDays(1);
    // 获取当前日其所在月总天数
    LocalDate startTime = LocalDate.parse("2021-06-01");
    LocalDate endTime = LocalDate.parse("2021-05-01");
    long betweenDays = ChronoUnit.DAYS.between(startTime, endTime);
    System.out.println(betweenDays);
}

结果(只打印个别):
在这里插入图片描述

二. LocalTime

LocalTime 只会获取到时、分、秒。

@Test
public void testLocalTime() {
    // 获取当前的时、分、秒
    LocalTime now = LocalTime.now();
    LocalTime.of(12,10,30);
    System.out.println(now.toString());
    // 获取小时
    int hour = now.getHour();
    int hour1 = now.get(ChronoField.HOUR_OF_DAY);
    System.out.println(hour);
    // 获取分
    int minute = now.getMinute();
    int minute1 = now.get(ChronoField.MINUTE_OF_HOUR);
    System.out.println(minute);
    // 获取秒
    int second = now.getSecond();
    int second1 = now.get(ChronoField.SECOND_OF_MINUTE);
    System.out.println(second);
    // 纳秒
    int nano = now.getNano();
    System.out.println(nano);
}

结果:
在这里插入图片描述

三. LocalDateTime

LocalDateTime可以获得年、月、日、时、分、秒。来个公式:LocalDateTime = LocalDate + LocalTime

@Test
public void testLocalDateTime() {
     LocalDateTime localDateTime = LocalDateTime.of(2021, Month.SEPTEMBER, 10,
             14, 20, 10);
     System.out.println(localDateTime.toString());
     // 修改年为2019
     localDateTime = localDateTime.withYear(2020);
     System.out.println(localDateTime.toString());
     // 修改为2022
     localDateTime = localDateTime.with(ChronoField.MONTH_OF_YEAR, 3);
     System.out.println(localDateTime.toString());
 }

结果:
在这里插入图片描述

四. 自定义格式化

格式:xxx.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

三者都可以自定义格式化,以LocalDateTime为例:

@Test
public void testLocalDateTime() {
    LLocalDateTime localDateTime = LocalDateTime.of(2021, Month.SEPTEMBER, 10,
                14, 20, 10);
    System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    System.out.println(localDateTime.format(DateTimeFormatter.BASIC_ISO_DATE));
    System.out.println(localDateTime.format(DateTimeFormatter.ISO_DATE));
    System.out.println(localDateTime.format(DateTimeFormatter.ISO_DATE_TIME));
    System.out.println(localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE));
    System.out.println(localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
}

结果如下:
在这里插入图片描述
DateTimeFormatterSimpleDateFormat对比而言,DateTimeFormatter是线性安全的。

最后做个总结,对于Jdk8的应用,可以做出以下改变:

  • Instant代替Date
  • LocalDateTime代替Calendar
  • DateTimeFormatter代替SimpleDateFormat
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zong_0915

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值