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

Android Studio中Kotlin获取DatePicker选中日期星期并判断是否为周末

解决DatePicker获取选中日期星期并判断周末的问题

你没法直接给onDateSet方法加星期参数,因为这个方法是DatePickerDialog.OnDateSetListener接口规定好的,参数是固定的。想要拿到选中日期的星期,得用获取到的年月日自己计算,下面给两种可行的方法:

方法一:使用Calendar类(兼容所有Android版本)

在onDateSet方法里,用选中的年月日初始化一个Calendar实例,然后获取星期值,再判断是否为周末:

override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
    savedDay = dayOfMonth
    savedYear = year
    savedMonth = month

    // 初始化Calendar,设置选中的日期
    val calendar = Calendar.getInstance().apply {
        set(Calendar.YEAR, year)
        // Calendar的月份是从0开始的,和DatePicker返回的month一致,不用加1
        set(Calendar.MONTH, month)
        set(Calendar.DAY_OF_MONTH, dayOfMonth)
    }

    // 获取星期值,Calendar中周日是1,周一到周六是2-7
    val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
    val isWeekend = dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY

    // 这里可以根据isWeekend做后续逻辑,比如提示用户
    if (isWeekend) {
        Toast.makeText(this, "选中的日期是周末", Toast.LENGTH_SHORT).show()
    } else {
        Toast.makeText(this, "选中的日期是工作日", Toast.LENGTH_SHORT).show()
    }
}

方法二:使用LocalDate(推荐,API 26+,低版本需依赖ThreeTenABP)

如果你的项目支持Android 8.0(API 26)及以上,或者引入了ThreeTenABP库处理低版本,用LocalDate会更简洁直观:

import java.time.LocalDate
import java.time.DayOfWeek

override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
    savedDay = dayOfMonth
    savedYear = year
    savedMonth = month

    // LocalDate的月份是从1开始的,所以要把DatePicker返回的month(0开始)加1
    val localDate = LocalDate.of(year, month + 1, dayOfMonth)
    val dayOfWeek = localDate.dayOfWeek

    val isWeekend = dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY

    // 后续逻辑
    if (isWeekend) {
        Toast.makeText(this, "选中的日期是周末", Toast.LENGTH_SHORT).show()
    } else {
        Toast.makeText(this, "选中的日期是工作日", Toast.LENGTH_SHORT).show()
    }
}

如果是API低于26的项目,需要在build.gradle里添加ThreeTenABP依赖:

implementation 'com.jakewharton.threetenabp:threetenabp:1.4.4'

然后在Application类里初始化:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        AndroidThreeTen.init(this)
    }
}

之后就可以像API26+一样使用LocalDate相关类了。

内容的提问来源于stack exchange,提问作者Nonfui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:03:08