惯用地获取给定月份的第一天

Get first day of given month idiomatically

我有一个给定月份和年份的撰写视图。我想以惯用的 Kotlin 方式找到给定 month/year 组合的第一个工作日。这是我目前所拥有的:

fun CalendarMonthView(
    month: Month = LocalDate.now().month,
    year: Int = LocalDate.now().year
) {

// ...
    val weekDayNames = DateFormatSymbols.getInstance().weekdays
    val firstWeekdayOfMonth = //type annotation in IntelliJ: (Calendar .. Calendar?)
        Calendar.getInstance().also {
            it.set(Calendar.DATE, 1)
            it.set(Calendar.MONTH, month.value)
            it.set(Calendar.YEAR, year)
            it.set(Calendar.DAY_OF_MONTH, 1)
            // does not evaluate to a string?
            weekDayNames[it.get(Calendar.DAY_OF_WEEK)]
    }
// ...
}

有没有一种惯用的方法来代替类似的方法:

val cal = Calendar.getInstance()
cal.set(Calendar.DATE, 1)
cal.set(Calendar.MONTH, month.value)
cal.set(Calendar.YEAR, year)
cal.set(Calendar.DAY_OF_MONTH, 1)
val firstDay = weekDayNames[cal.get(Calendar.DAY_OF_WEEK)] // type annotation: String

您可以这样做:

val month = LocalDate.now().month
val year = LocalDate.now().year
val dayOfWeek = LocalDate.of(year, month, 1).dayOfWeek
println(dayOfWeek.name) // prints "FRIDAY" for April 2022

Try it yourself