Flutter中如何给millisecondsSinceEpoch时间戳增加24小时?
问题描述
需要为日历中选中日期对应的毫秒级时间戳(millisecondsSinceEpoch)增加24小时。但直接添加24小时会得到当天的00:00时间,于是尝试添加23小时59分59秒,但这种方式是错误的。恳请提供解决方案。
原代码
DateTime initialTime = selectedDate.value; DateTime finalTime = selectedDate.value.add(new Duration(hours: 23,minutes: 59,seconds: 59)); int finalTimeInEpoch = finalTime.millisecondsSinceEpoch; print('This is the initial time for selected day --> $initialTime and This is the final time for selected day --> $finalTime'); int initialTimeForApi = initialTime.millisecondsSinceEpoch; int finalTimeForApi= finalTimeInEpoch; print('This is the initial time for selected day --> ${initialTime.millisecondsSinceEpoch} and This is the final time for selected day --> $finalTimeInEpoch in millisecondsSinceEpoch');
解决方案
核心思路
如果你的需求是获取选中日期当天结束时刻的时间戳(而非单纯给当前时间加24小时),正确的做法是先计算选中日期的次日零点,再减去1毫秒,这样能精准覆盖当天最后一毫秒的时间,避免遗漏毫秒部分的时间范围。
修正后的代码
// 先获取选中日期的当天起始时刻(午夜零点) DateTime startOfDay = DateTime(selectedDate.value.year, selectedDate.value.month, selectedDate.value.day); // 计算次日零点,再减去1毫秒得到当天的最后一刻 DateTime endOfDay = startOfDay.add(Duration(days: 1)).subtract(Duration(milliseconds: 1)); int initialTimeForApi = startOfDay.millisecondsSinceEpoch; int finalTimeForApi = endOfDay.millisecondsSinceEpoch; print('当天起始时间戳: $initialTimeForApi'); print('当天结束时间戳: $finalTimeForApi');
说明
- 直接添加24小时得到次日零点的原因:如果
selectedDate.value本身就是当天的午夜零点,添加24小时自然会得到次日零点。 - 避免使用23小时59分59秒的原因:这种方式会忽略毫秒部分,导致当天最后999毫秒的时间未被包含在范围内,可能造成数据查询或逻辑判断的遗漏。
内容的提问来源于stack exchange,提问作者Ashu Upadhyay
相关产品推荐
相关产品推荐

