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

如何手动设置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:15:04