如何在 Dart 和 Flutter 中将时间四舍五入到最近的四分之一小时?

x23*_*3b5 3 datetime dart flutter

我有一个DateTime并希望将其四舍五入到 15 秒(或其他时间间隔)。

例如“2020-03-16 12:23: 53.756 ”到“2020-03-16 12:23: 45.000

和“2020-03-16 12:24: 01.1234 ”到“2020-03-16 12:24: 00.000

x23*_*3b5 10

你可以在 Dart 和 Flutter 中使用 DateTime 的扩展来做到这一点:

extension on DateTime{

  DateTime roundDown({Duration delta = const Duration(seconds: 15)}){
    return DateTime.fromMillisecondsSinceEpoch(
        this.millisecondsSinceEpoch -
        this.millisecondsSinceEpoch % delta.inMilliseconds
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:

DateTime roundedDateTime = DateTime.now().roundDown();
print(roundedDateTime);
Run Code Online (Sandbox Code Playgroud)

输出:“2020-03-16 12:23:45.000”

或者

DateTime roundedDateTime = DateTime.now().roundDown(delta: Duration(hour: 1));
print(roundedDateTime);
Run Code Online (Sandbox Code Playgroud)

输出:“2020-03-16 12:00:00.000”


小智 5

除了上面的回答之外(请记住为您的扩展命名,并小心使用它。):

extension DateTimeExtension on DateTime {
  DateTime roundDown({Duration delta = const Duration(days: 1)}) {
    return DateTime.fromMillisecondsSinceEpoch(
        millisecondsSinceEpoch - millisecondsSinceEpoch % delta.inMilliseconds);
  }
}
Run Code Online (Sandbox Code Playgroud)