Open Jerry930326 opened 5 years ago
找到原因了,TimePickerView类中的initDefaultSelectedDate方法中: `//如果手动设置了时间范围 if (mPickerOptions.startDate != null && mPickerOptions.endDate != null) {
//若默认时间未设置,或者设置的默认时间越界了,则设置默认选中时间为开始时间。
if (mPickerOptions.date == null || mPickerOptions.date.getTimeInMillis() < mPickerOptions.startDate.getTimeInMillis()
|| mPickerOptions.date.getTimeInMillis() > mPickerOptions.endDate.getTimeInMillis()) {
mPickerOptions.date = mPickerOptions.startDate;
}
} else if (mPickerOptions.startDate != null) {
//没有设置默认选中时间,那就拿开始时间当默认时间
mPickerOptions.date = mPickerOptions.startDate;
} else if (mPickerOptions.endDate != null) {
mPickerOptions.date = mPickerOptions.endDate;
}`
比对的是getTimeInMillis,如果 endDate 比 date 创建的时间早的话,那就会把date赋值为 startDate,建议作者是否在比对时,判断一下 setType 的参数是显示哪几个字段,再去比对显示的字段。例如:只展示年月日,那就只比对年月日大小,忽略时分秒。
源码是比较时间戳,在不改源码的情况下,如果只使用年月日,可以将开始时间的时分秒赋值最小0:
startDate.set(Calendar.HOUR_OF_DAY, 0);
startDate.set(Calendar.MINUTE, 0);
startDate.set(Calendar.SECOND, 0);
结束是时间赋值最大23点59分59秒:
endDate.set(Calendar.HOUR_OF_DAY, 23);
endDate.set(Calendar.MINUTE, 59);
endDate.set(Calendar.SECOND, 59);
当设置当前时间=结束时间时,TimePickerView展示的是开始日期,如果当前时间=结束时间-1天时,TimePickerView正常显示。setDate的日期不能等于结束日期,这样就不能满足截止到当前日期时,默认展示当前日期的需求。