如何手动设置TimeOfDay对象的Day Period时段值
问题原因
TimeOfDay的period属性确实是只读属性,它会根据你初始化时传入的hour值自动计算,判定规则为:
- hour取值0~11 → 自动判定为AM时段
- hour取值12~23 → 自动判定为PM时段
你当前的写法刚好不符合12小时制和24小时制的对应规则:你要的12:00AM对应24小时制的0点,而你传了hour:12会被判定为PM;你要的11:59PM对应24小时制的23点,而你传了hour:11会被判定为AM,最终出现显示颠倒的问题。
修复方案
无需额外修改只读的period属性,直接按照对应规则调整初始化时的hour参数即可,修复后的代码如下:
if (!selectTimeOfDay) { final TimeOfDay allDayTime; if (placeholder == 'Start Date') { allDayTime = TimeOfDay(hour: 0, minute: 0); // 0点对应12:00AM } else { allDayTime = TimeOfDay(hour: 23, minute: 59); // 23点对应11:59PM } onChanged(DateTime(date.year, date.month, date.day, allDayTime.hour, allDayTime.minute)); return; }
如果需要基于12小时制+时段手动构造TimeOfDay,也可以直接调用TimeOfDay.fromDateTime方法,传入符合24小时制规则的DateTime对象,即可自动生成period正确的TimeOfDay实例。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

