2016-06-14 60 views
3

設置一個工作日,我有以下喬達時間代碼設置平日:如何使用java8

LocalDateTime localDateTime = new LocalDateTime(2016, 1, 1, 20,39); 
LocalDateTime localDateTime1 = localDateTime.withDayOfWeek(7); 

我怎樣才能做同樣的java.time?我看是沒有setDayOfTheWeek

LocalDateTime time; 
time.getDayOfWeek() 

回答

2

您有幾種方式做到這一點:

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); 
2

它沒有setDayOfTheWeek因爲LocalDateTime是不變的,所以它沒有制定者修改的對象。 (喬達時間類也是不可變的!)。

使用此Java中8:

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

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)