如何使用 java8 设置工作日
how to set a weekday using java8
我有以下设置工作日的 Joda-Time 代码:
LocalDateTime localDateTime = new LocalDateTime(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.withDayOfWeek(7);
如何对 java.time
执行相同的操作?我看到没有 setDayOfTheWeek
:
LocalDateTime time;
time.getDayOfWeek()
使用time.with(TemporalAdjuster)
, specifying an instance of DayOfWeek
,例如
LocalDateTime time1 = time.with(DayOfWeek.FRIDAY);
您有几种方法可以做到:
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);
它没有setDayOfTheWeek
因为LocalDateTime
是不可变的,所以它没有修改对象的setter。 (乔达时间 类 也是不可变的!)。
在 Java 8:
中使用这个
LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.with(DayOfWeek.SUNDAY);
java.time
API 没有 withDayOfWeek(DayOfWeek)
方法。但是它确实有一个通用的 with(TemporalAccessor)
方法可以代替使用:
LocalDateTime dt = base.with(DayOfWeek.WEDNESDAY);
但是,这留下了关于选择星期三的问题(它实际上在星期一到星期日的一周内更改了日期)。更好的方法是使用 TemporalAdjuster
使其更明确:
import static java.time.DayOfWeek.WEDNESDAY;
import static java.time.temporal.TemporalAdjusters.next;
LocalDateTime dt = base.with(next(WEDNESDAY));
这会将日期更改为基准日期之后的下一个星期三。请参阅 TemporalAdjusters
以了解可用的选项:
next(DayOfWeek)
nextOrSame(DayOfWeek)
previous(DayOfWeek)
previousOrSame(DayOfWeek)
firstInMonth(DayOfWeek)
lastInMonth(DayOfWeek)
dayOfWeekInMonth(int, DayOfWeek)
我有以下设置工作日的 Joda-Time 代码:
LocalDateTime localDateTime = new LocalDateTime(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.withDayOfWeek(7);
如何对 java.time
执行相同的操作?我看到没有 setDayOfTheWeek
:
LocalDateTime time;
time.getDayOfWeek()
使用time.with(TemporalAdjuster)
, specifying an instance of DayOfWeek
,例如
LocalDateTime time1 = time.with(DayOfWeek.FRIDAY);
您有几种方法可以做到:
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);
它没有setDayOfTheWeek
因为LocalDateTime
是不可变的,所以它没有修改对象的setter。 (乔达时间 类 也是不可变的!)。
在 Java 8:
中使用这个LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.with(DayOfWeek.SUNDAY);
java.time
API 没有 withDayOfWeek(DayOfWeek)
方法。但是它确实有一个通用的 with(TemporalAccessor)
方法可以代替使用:
LocalDateTime dt = base.with(DayOfWeek.WEDNESDAY);
但是,这留下了关于选择星期三的问题(它实际上在星期一到星期日的一周内更改了日期)。更好的方法是使用 TemporalAdjuster
使其更明确:
import static java.time.DayOfWeek.WEDNESDAY;
import static java.time.temporal.TemporalAdjusters.next;
LocalDateTime dt = base.with(next(WEDNESDAY));
这会将日期更改为基准日期之后的下一个星期三。请参阅 TemporalAdjusters
以了解可用的选项:
next(DayOfWeek)
nextOrSame(DayOfWeek)
previous(DayOfWeek)
previousOrSame(DayOfWeek)
firstInMonth(DayOfWeek)
lastInMonth(DayOfWeek)
dayOfWeekInMonth(int, DayOfWeek)