如何在DART(Flutter)中四舍五入最接近30分钟间隔的日期时间?

时间:2020-03-27 05:10:30

标签: date datetime flutter dart

我想将DateTime舍入到最近的30分钟。 DART中提供了舍入机制吗?

1 个答案:

答案 0 :(得分:1)

此函数将 DateTime 转换为时钟中最接近的 30 分钟标记。请注意,此 30 分钟标记是相对于运行此代码的机器的本地时区获得的。

 DateTime roundWithin30Minutes(DateTime d) {
  final int deltaMinute;
  if (d.minute < 15) {
    deltaMinute = -d.minute; // go back to zero
  } else if (d.minute < 45) {
    deltaMinute = 30 - d.minute; // go to 30 minutes
  } else {
    deltaMinute = 60 - d.minute;
  }
  return d.add(Duration(
      milliseconds: -d.millisecond,
      // reset milliseconds to zero
      microseconds: -d.microsecond,
      // reset microseconds to zero,
      seconds: -d.second,
      // reset seconds to zero
      minutes: deltaMinute));
}

如果您在偏移持续时间不是 30 分钟的倍数(例如:尼泊尔时区为 GMT+5:45)的另一个非本地时区中显示此 DateTime,则此实现将不起作用