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
相关产品推荐
相关产品推荐

