惯用地获取给定月份的第一天
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
我有一个给定月份和年份的撰写视图。我想以惯用的 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