如何使用java8设置工作日

如何使用java8设置工作日,java,datetime,time,java-time,Java,Datetime,Time,Java Time,我有以下设置工作日的Joda时间代码: LocalDateTime localDateTime = new LocalDateTime(2016, 1, 1, 20,39); LocalDateTime localDateTime1 = localDateTime.withDayOfWeek(7); 如何使用java.time?我看到没有SetDayOfWeek: LocalDateTime time; time.getDayOfWeek() 使用,指定的实例,例如 您有几种方法可以做到这

我有以下设置工作日的Joda时间代码:

LocalDateTime localDateTime = new LocalDateTime(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.withDayOfWeek(7); 
如何使用
java.time
?我看到没有
SetDayOfWeek

LocalDateTime time;
time.getDayOfWeek()
使用,指定的实例,例如


您有几种方法可以做到这一点:

LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 20, 39);

LocalDateTime ldt1 = localDateTime.with(ChronoField.DAY_OF_WEEK, 7);
LocalDateTime ldt2 = localDateTime.with(DayOfWeek.of(7));
//Or, more readable, as suggested by @AndyTurner
LocalDateTime ldt3 = localDateTime.with(DayOfWeek.SUNDAY);

它没有
SetDayOfWeek
,因为
LocalDateTime
是不可变的,所以它没有用于修改对象的setter。(Joda时间类也是不可变的!)

在Java 8中使用此选项:

LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.with(DayOfWeek.SUNDAY);

java.time
API没有
withDayOfWeek(DayOfWeek)
方法。但是,它确实有一个通用的方法可以替代:

LocalDateTime dt = base.with(DayOfWeek.WEDNESDAY);
但是,这就留下了选择哪一个星期三的问题(它实际上将星期一内的日期更改为星期天)。更好的方法是使用A使其更加明确:

import static java.time.DayOfWeek.WEDNESDAY;
import static java.time.temporal.TemporalAdjusters.next;

LocalDateTime dt = base.with(next(WEDNESDAY));
这会将日期更改为基准日期后的下一个星期三。请参阅以了解可用选项:

  • next(DayOfWeek)
  • nextOrSame(DayOfWeek)
  • 上一个(星期一)
  • previousorname(DayOfWeek)
  • firstInMonth(DayOfWeek)
  • lastInMonth(DayOfWeek)
  • dayOfWeekInMonth(int,DayOfWeek)
import static java.time.DayOfWeek.WEDNESDAY;
import static java.time.temporal.TemporalAdjusters.next;

LocalDateTime dt = base.with(next(WEDNESDAY));