You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:01