从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

    • 我的Java学习路线
    • 安装Java
    • Java数据类型

    • Java多版本配置
    • 面向对象

    • Java核心类

    • IO

    • Java与时间

      • Java中的时间
      • Date、Calendar和TimeZone
      • LocalDate、LocalTime和LocalDateTime
      • 一些日期的枚举类
      • DateTimeFormatter
      • 时间调节器
        • TemporalAdjusters
        • TemporalAdjuster
        • 实现TemporalAdjuster​​接口
        • 参考
      • Duration和Period
      • ZonedDateTime
      • Instant时刻
      • Java新旧时间API转换
    • 异常处理

    • 哈希和加密算法

    • Java8新特性

    • 网络编程

    • Java
  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaSE
  • Java与时间
2022-12-27
目录

时间调节器

# 55.时间调节器

​ ‍

调整时间的高级方法

# TemporalAdjusters

​LocalDateTime​​还有一个通用的with()​​方法允许我们做更复杂的运算。with的参数是TemporalAdjuster对象,是一个时间调节器,将一个时间调节成另外一个时间。我们来看看示例代码:

    LocalDateTime dt = LocalDateTime.of(2022,5, 21, 13, 14, 15);

    dt = dt.with(TemporalAdjusters.firstDayOfMonth());
    System.out.println("firstDayOfMonth: " + dt); //2022-05-01T13:14:15

    dt = dt.with(TemporalAdjusters.lastDayOfMonth());
    System.out.println("lastDayOfMonth: " + dt);  //2022-05-31T13:14:15

    dt = dt.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); //找到下一个星期一
    System.out.println("DayOfWeek.MONDAY: " + dt);  //2022-06-06T13:14:15

    dt = dt.with(TemporalAdjusters.firstDayOfNextMonth());  //找到下个月的第一天。
    System.out.println("firstDayOfNextMonth: " + dt);   //2022-07-01T13:14:15


    dt = dt.with(TemporalAdjusters.lastDayOfYear());  //找到一年中的最后一天。
    System.out.println("lastDayOfYear: " + dt);   // 2022-12-31T13:14:15


    dt = dt.with(TemporalAdjusters.firstDayOfYear()); //一年的第一天
    System.out.println("firstDayOfYear: " + dt);  //2022-01-01T13:14:15

    dt = dt.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));  //该月的最后一个星期日
    System.out.println("lastInMonth DayOfWeek.SUNDAY: " + dt);  //2022-01-30T13:14:15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

‍

# TemporalAdjuster

我们还可以自定义调节器规则,在规则里写业务逻辑等

TemporalAdjuster taj = t -> t.plus(Period.ofDays(14));  // lambda语法,增加14天
dt = dt.with(taj);
System.out.println(dt); //2022-02-13T13:14:15
1
2
3

‍

# 实现TemporalAdjuster​​接口

我们还可以通过实现TemporalAdjuster​接口来创建时间调整器

import java.time.LocalDate;
import java.time.temporal.ChronoField;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;

class NextChristmas implements TemporalAdjuster {

    @Override
    public Temporal adjustInto(Temporal temporal) {

        return temporal.with(ChronoField.MONTH_OF_YEAR, 12)
                .with(ChronoField.DAY_OF_MONTH, 25);

    }
}

public class JavaCustomTemporalAdjusterEx2 {

    public static void main(String[] args) {

        var now = LocalDate.now();
        System.out.println("Today: " + now);

        var xmas = now.with(new NextChristmas());
        System.out.println("Next XMas: " + xmas);
    }
}
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

‍

# 参考

Java TemporalAdjusters|极客教程 (opens new window)

在GitHub上编辑此页 (opens new window)
上次更新: 2022/12/27 22:03:10
DateTimeFormatter
Duration和Period

← DateTimeFormatter Duration和Period→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式