我们都知道,java8新增的time包中使用 LocalDateTime.of() 方法能方便的生成指定时间。
但是有时候需要获取生活中的一些指定日期时间,如获取固定的每月几日或者每周周几,这样的场景;of()方法就捉襟见肘了。
不要着急,LocalDateTime还提供了一个 with() 方法,能够方便的达到以上目的。
先看举例:
需求:获取当前周四日期和当月6号日期
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println("now: " + now.format(dtf));
LocalTime localTime = LocalTime.of(0, 0, 0);
LocalDateTime ldt1 = LocalDateTime.of(LocalDateTime.now()
.with(ChronoField.DAY_OF_WEEK, 4).toLocalDate(), localTime);
System.out.println("ldt1: " + ldt1.format(dtf));
LocalDateTime ldt2 = LocalDateTime.of(LocalDateTime.now()
.with(ChronoField.DAY_OF_MONTH, 6).toLocalDate(), localTime);
System.out.println("ldt2: " + ldt2.format(dtf));
}
控制台输出:
注意到这个枚举类:ChronoField 内置了一些常用的枚举值。
枚举值 | 含义 |
---|---|
NANO_OF_SECOND | The nano-of-second. |
NANO_OF_DAY | The nano-of-day. |
MICRO_OF_SECOND | The micro-of-second. |
MICRO_OF_DAY | The micro-of-day. |
MILLI_OF_SECOND | The milli-of-second. |
MILLI_OF_DAY | The milli-of-day. |
SECOND_OF_MINUTE | The second-of-minute. |
SECOND_OF_DAY | The second-of-day. |
MINUTE_OF_HOUR | The minute-of-hour. |
MINUTE_OF_DAY | The minute-of-day. |
HOUR_OF_AMPM | The hour-of-am-pm. |
CLOCK_HOUR_OF_AMPM | The clock-hour-of-am-pm. |
HOUR_OF_DAY | The hour-of-day. |
CLOCK_HOUR_OF_DAY | The clock-hour-of-day. |
AMPM_OF_DAY | The am-pm-of-day. |
DAY_OF_WEEK | The day-of-week, such as Tuesday. |
ALIGNED_DAY_OF_WEEK_IN_MONTH | The aligned day-of-week within a month. |
ALIGNED_DAY_OF_WEEK_IN_YEAR | The aligned day-of-week within a year. |
DAY_OF_MONTH | The day-of-month. |
DAY_OF_YEAR | The day-of-year. |
EPOCH_DAY | The epoch-day, based on the Java epoch of 1970-01-01 (ISO). |
ALIGNED_WEEK_OF_MONTH | The aligned week within a month. |
ALIGNED_WEEK_OF_YEAR | The aligned week within a year. |
MONTH_OF_YEAR | The month-of-year, such as March. |
… | … |
具体注释请看 java.time.temporal.ChronoField 源码。