我想将DateTime舍入到最近的30分钟。 DART中提供了舍入机制吗?
答案 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
,则此实现将不起作用。