如何使用java8
问题描述:
设置一个工作日,我有以下乔达时间代码设置平日:如何使用java8
LocalDateTime localDateTime = new LocalDateTime(2016, 1, 1, 20,39);
LocalDateTime localDateTime1 = localDateTime.withDayOfWeek(7);
我怎样才能做同样的java.time
?我看是没有setDayOfTheWeek
:
LocalDateTime time;
time.getDayOfWeek()
答
使用time.with(TemporalAdjuster)
,指定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
是不变的,所以它没有制定者修改的对象。 (乔达时间类也是不可变的!)。
使用此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)