我想創建一個函式,回傳給定范圍內的日期串列,并帶有遞回功能。我將提供起始日期、結束日期和遞回型別。我不確定如何開始。任何建議都會有幫助。是否有這方面的庫,或者我必須自己做?
data class date(
val day: Int,
val month: Int,
val年。Int
)
enum class recursion {
NEVER。
EVERY_DAY,
every_work_day,
EVERY_WEEK,
EVERY_MONTH,
每年
}
fun createListOfEvents( startDate: Date, endDate: Date, recursion: Recursion)。串列<日期>{
}
uj5u.com熱心網友回復:
好吧,基本上這是一個例子,你可以這樣做:
data class Recursion(val field : TemporalUnit, val step: Long)
val step1Day = Recursion(field = ChronoUnit.DAYS, step = 1)
fun createListOfEvents(startDate: LocalDate, endDate: LocalDate, recursion: Recursion)。List<LocalDate>{
var currentDate = startDate
val listOfDates = mutableListOf<LocalDate> ()
while (currentDate.isBefore(endDate)) {
listOfDates.add(currentDate)
currentDate = startDate.plus(recursion.step, recursion.field)
}
return listOfDates
}
該方法回傳從startDate到endDate的日期串列,步驟為Recursion。
正如你所看到的,我為此使用了java.time.*類,但最終你可以將它們轉換為你自己的Date和Recursion,并回傳。
這里的TemporalUnit可以是DAYS, WEEKS, MONTHS, YEARS(和其他)。
它涵蓋了你的大部分需求,作業日你將不得不手動管理。
希望這有意義)
uj5u.com熱心網友回復:
你需要啟用desugaring如果針對SDK < 26.
那么你就可以使用 LocalDate 類來實作。你的Date類有點多余,但如果你想保留它,你可以在函式里面轉換為LocalDate。
fun createListOfEvents(startDate: LocalDate, endDate: LocalDate, recursion: Recursion)。List<LocalDate> {
val step = when (recursion) {
Recursion.NEVER -> return emptyList()
Recursion.EVERY_DAY, Recursion.EVERY_WORK_DAY -> Period.ofDays(1)
Recursion.EVERY_WEEK -> Period.ofWeeks(1)
遞回.EVERY_MONTH -> Period.ofMonths(1)
Recursion.ANNUAL -> Period.ofYears(1)
}
var date = startDate
val list = mutableListOf<LocalDate> ()
while (date <= endDate) {
list.add(date)
date = step
}
if (recursion == Recursion.EVERY_WORK_DAY) {
val weekend = listOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY)
list.removeAll { it.dayOfWeek in weekend }
}
return list
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/319308.html
標籤:
上一篇:forEach/函式遞回和回傳值
