Kotlin实现点击前后按钮获取对应周startDate与endDate的方法
Kotlin 周起止日期切换实现方案
需求说明:默认显示当前周起止日期,点击上一周/下一周按钮后更新为对应周的起止日期
实现思路
优先使用java.time系列API实现,相比旧的Calendar类代码更简洁、出错概率更低,Android低版本可以通过核心库脱糖支持。
完整实现代码
1. 引入依赖(Android低版本适配可选)
如果你的Android项目minSdk < 26,需要先开启核心库脱糖支持,在模块级build.gradle中添加配置:
android { compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
2. 核心逻辑实现
import java.time.DayOfWeek import java.time.LocalDate import java.time.format.DateTimeFormatter import java.time.temporal.TemporalAdjusters // 周偏移量,0代表当前周,负数为过去的周,正数为未来的周 private var currentWeekOffset = 0 // 日期格式化规则,可按需修改 private val dateFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd") /** * 根据周偏移量获取对应周的起止日期 * @param weekOffset 周偏移量 * @return Pair<周开始日期, 周结束日期> */ fun getWeekStartEndDate(weekOffset: Int): Pair<LocalDate, LocalDate> { val baseDate = LocalDate.now().plusWeeks(weekOffset.toLong()) // 周一作为周起始,如需周日为起始,将下方DayOfWeek.MONDAY改为DayOfWeek.SUNDAY val startOfWeek = baseDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)) // 周日作为周结束,如需周六为结束,将下方DayOfWeek.SUNDAY改为DayOfWeek.SATURDAY val endOfWeek = baseDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)) return startOfWeek to endOfWeek } /** * 更新周日期展示文本 */ fun updateWeekDateDisplay() { val (startDate, endDate) = getWeekStartEndDate(currentWeekOffset) val displayText = "${startDate.format(dateFormatter)} - ${endDate.format(dateFormatter)}" // 此处将displayText赋值给你的页面展示控件即可,示例:tvWeekRange.text = displayText }
3. 按钮点击事件绑定
// 上一周按钮点击逻辑 btnPreviousWeek.setOnClickListener { currentWeekOffset -= 1 updateWeekDateDisplay() } // 下一周按钮点击逻辑 btnNextWeek.setOnClickListener { currentWeekOffset += 1 updateWeekDateDisplay() } // 页面初始化时调用一次,默认显示当前周 updateWeekDateDisplay()
内容的提问来源于stack exchange,提问作者SabetiG
相关产品推荐
相关产品推荐


