Java——LocalDateTime

JAVA8新特性中添加的时间处理类,相比与以前使用的Date和Canlendar类,该类在时间处理上更加的简单方便。下面记录一些常用的方法。

目录

一、获取LocalDateTime类型的时间(静态方法)

1. LocalDateTime.now()

2. LocalDateTime.now(ZoneId zoneId)

3. LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute)

4. LocalDateTime.parse(CharSequence text)

5. LocalDateTime.parse(CharSequence text,  DateTimeFormatter formatter)

实例如下:

二、增加、减少指定时间(实例方法)

1. localDateTime.plus(TemporalAmount amount)

2. localDateTime.plus(long amountToAdd, TemporalUnit unit)

3. localDateTime.plusYears(long years)

4. localDateTime.plusMonths(long months)

5. localDateTime.plusWeeks(long weeks)

6. localDateTime.plusDays(long days)

7. localDateTime.plusHours(long hours)

8. localDateTime.minus(TemporalAmount amount)

实例如下:

三、修改指定的时间,如将时间修改为当月第一天、当月最后一天、第几周等

1. localDateTime.with(TemporalAdjuster adjuster)

2. localDateTime.withYear(int year)

实例如下:

四、获取指定的时间,如当前时间的周、年、天等

1. localDateTime.getYear()

五、获取两个时间相差的年月日等

1. localDateTime.until(Temporal endTime, TemporalUnit unit);

实例如下:

六、时间类的相互转换

1. 转换成LocalDate与LocalTime


一、获取LocalDateTime类型的时间(静态方法)

1. LocalDateTime.now()

从默认时区的系统时钟获取当前的日期时间。

2. LocalDateTime.now(ZoneId zoneId)

从指定时区的系统时钟获取当前的日期时间。

3. LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute)

从年,月,日,小时和分钟获得 LocalDateTime的实例,将秒和纳秒设置为零。

LocalDateTime.of有很多重载函数,根据不同的情况使用不同的函数。

4. LocalDateTime.parse(CharSequence text)

从一个文本字符串(如 2007-12-03T10:15:30获取一个 LocalDateTime的实例。

5. LocalDateTime.parse(CharSequence text,  DateTimeFormatter formatter)

使用特定的格式化 LocalDateTime从文本字符串获取 LocalDateTime的实例。

实例如下:

    public void test() throws Exception{
        //北京时间
        LocalDateTime dateTime1 = LocalDateTime.now();
        //美国洛杉矶时间
        LocalDateTime dateTime2 = LocalDateTime.now(ZoneId.of("America/Los_Angeles"));
        //2020年12月1日 13时50分
        LocalDateTime dateTime3 = LocalDateTime.of(2020, 12, 1, 13, 50);
        //2020年12月2日 8时50分30秒
        LocalDateTime dateTime4 = LocalDateTime.of(2020, 12, 2, 8, 50, 30);
        //2020年12月14日 12时50秒
        LocalDateTime dateTime5 = LocalDateTime.parse("2020-12-14T12:00:50");
        //2020年12月8日 17时30分50秒
        LocalDateTime dateTime6 = LocalDateTime.parse("2020-12-08 17:30:50", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("北京时间:" + dateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("美国洛杉矶时间:" + dateTime2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("指定时间1:" + dateTime3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("指定时间2:" + dateTime4.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("指定时间3:" + dateTime5.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("指定时间4:" + dateTime6.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }

输出结果如下:

二、增加、减少指定时间(实例方法)

1. localDateTime.plus(TemporalAmount amount)

通常会回调到LocalDateTime.plus(long amountToAdd, TemporalUnit unit)

2. localDateTime.plus(long amountToAdd, TemporalUnit unit)

指定增加的数量,指定增加的单位,如天、月、年,这里需要注意的是,单位传递可以使用Chronounit来获取对应的TemporalUnit的参数值,比如这样调用:

LocalDateTime dateTime2 = dateTime1.plus(5, ChronoUnit.DAYS);指定对dateTime1增加5天时间

3. localDateTime.plusYears(long years)

4. localDateTime.plusMonths(long months)

5. localDateTime.plusWeeks(long weeks)

6. localDateTime.plusDays(long days)

7. localDateTime.plusHours(long hours)

可以直接通过方法名知道,这是指定了单位的添加,不需要我们自定义添加单位,更加方便使用,从年到秒都有相应的函数。

与增加时间相反的则是减少时间,减少时间使用minus()函数

8. localDateTime.minus(TemporalAmount amount)

减少时间的函数的使用和增加时间函数使用一致,这里不再阐述。

实例如下:

    public void test() throws Exception{
        //北京时间
        LocalDateTime dateTime1 = LocalDateTime.now();
        LocalDateTime dateTime2 = dateTime1.plus(5, ChronoUnit.DAYS);
        //应该是2021年1月2日了
        LocalDateTime dateTime3 = dateTime1.plusDays(7);
        LocalDateTime dateTime4 = dateTime1.minus(5, ChronoUnit.DAYS);
        System.out.println("当前时间:" + dateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        System.out.println("自定义增加5天:" + dateTime2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        System.out.println("增加7天:" + dateTime3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        System.out.println("自定义减少5天:" + dateTime4.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
    }

输出结果如下:

三、修改指定的时间,如将时间修改为当月第一天、当月最后一天、第几周等

1. localDateTime.with(TemporalAdjuster adjuster)

一个简单的调整器可能只是设置一个字段,如年份字段。 更复杂的调整器可能会将日期设置为该月的最后一天。 TemporalAdjuster提供了一些常见的调整 。 这些包括找到“月的最后一天”和“下周三”。

获取当月最后一天如下:

LocalDateTime lastDayOfMonth = localDateTime.with(TemporalAdjusters.lastDayOfMonth());

2. localDateTime.withYear(int year)

返回一个localDateTime改变了年份的时间,时间改为参数,如,年份改成2015,参数就是2015,其他如月、日、时、分、秒则不变,其他withDay()等方法不再阐述。

实例如下:

    public void test() throws Exception{
        //北京时间
        LocalDateTime dateTime1 = LocalDateTime.now();
        LocalDateTime dateTime2 = dateTime1.with(TemporalAdjusters.firstDayOfMonth());
        LocalDateTime dateTime3 = dateTime1.withYear(2015);
        LocalDateTime dateTime4 = dateTime1.withHour(4);
        LocalDateTime dateTime5 = dateTime1.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0);
        System.out.println("当前时间:" + dateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("时间修改为当前时间当月的第一天:" + dateTime2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("时间年份修改为2015的时间:" + dateTime3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("小时改变为凌晨4时的时间:" + dateTime4.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("当前时间的当月第一天0时0点0分0秒:" + dateTime5.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }

输出结果如下:

四、获取指定的时间,如当前时间的周、年、天等

1. localDateTime.getYear()

返回当前时间的年份,其他诸如getDayOfMonth()等不再阐述,可以上面阐述的修改指定时间配合返回需要的年份、天数等。

五、获取两个时间相差的年月日等

1. localDateTime.until(Temporal endTime, TemporalUnit unit);

根据指定的单位计算到另一个日期时间的时间量。这里计算的就是localDateTime到endTime需要增加的单位,下面的例子能更好说明。

实例如下:

    public void testMethod1() throws Exception {
        List<LocalDateTime> dateTimes = new LinkedList<>();
        LocalDateTime dateTime1 = LocalDateTime.of(2018, 12, 28, 0, 0);
        //天
        LocalDateTime dateTime2 = LocalDateTime.of(2018, 12, 21, 0, 0);
        LocalDateTime dateTime3 = LocalDateTime.of(2018, 12, 21, 8, 40);
        //月
        LocalDateTime dateTime4 = LocalDateTime.of(2018, 11, 28, 0, 0);
        LocalDateTime dateTime5 = LocalDateTime.of(2018, 11, 21, 8, 40);
        LocalDateTime dateTime51 = LocalDateTime.of(2018, 11, 28, 8, 40);
        //年
        LocalDateTime dateTime6 = LocalDateTime.of(2019, 12, 28, 0, 0);
        LocalDateTime dateTime7 = LocalDateTime.of(2019, 12, 21, 8, 40);
        //时
        LocalDateTime dateTime8 = LocalDateTime.of(2018, 12, 28, 8, 0);
        LocalDateTime dateTime9 = LocalDateTime.of(2018, 12, 28, 8, 40);
        long year1 = dateTime1.until(dateTime6, ChronoUnit.YEARS);
        long year2 = dateTime1.until(dateTime7, ChronoUnit.YEARS);

        long month1 = dateTime1.until(dateTime4, ChronoUnit.MONTHS);
        long month2 = dateTime1.until(dateTime5, ChronoUnit.MONTHS);
        long month3 = dateTime1.until(dateTime51, ChronoUnit.MONTHS);

        long day1 = dateTime1.until(dateTime2, ChronoUnit.DAYS);
        long day2 = dateTime1.until(dateTime3, ChronoUnit.DAYS);

        long hour1 = dateTime1.until(dateTime8, ChronoUnit.HOURS);
        long hour2 = dateTime1.until(dateTime9, ChronoUnit.HOURS);
        dateTimes.add(dateTime1);
        dateTimes.add(dateTime2);
        dateTimes.add(dateTime3);
        dateTimes.add(dateTime4);
        dateTimes.add(dateTime5);
        dateTimes.add(dateTime6);
        dateTimes.add(dateTime7);
        dateTimes.add(dateTime8);
        dateTimes.add(dateTime9);
        int count = 0;
        for (LocalDateTime localDateTime : dateTimes) {
            count++;
            System.out.println("date" + count + ":" + localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        }
        System.out.println("年:" + year1);
        System.out.println("年:" + year2);
        System.out.println("月:" + month1);
        System.out.println("月:" + month2);
        System.out.println("月:" + month3);
        System.out.println("日:" + day1);
        System.out.println("日:" + day2);
        System.out.println("时:" + hour1);
        System.out.println("时:" + hour2);
    }

输出结果如下:

六、时间类的相互转换

1. 转换成LocalDate与LocalTime

localDateTime.toLocalDate();localDateTime.toLocalTime();

这里就不再写转换成Date与Canlendar的实例,其一是LocalDateTime毕竟是对前两者的优化,所以前两者能做的,LocalDateTime也能做,并且可能会更方便,其二就是拿到了LocalDateTime,想转成其他类型,配合上面阐述的方法,可以有很多转化路径。

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值