如何使用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)