Dart:如何在 TimeOfDay 中添加或减去小时和分钟

Pra*_*nde 9 dart flutter

以下行将给出当前时间

TimeOfDay _time = TimeOfDay.now(); //12:42
Run Code Online (Sandbox Code Playgroud)

我想从 _time // 即 12:52 或 10:52..etc 添加或删除 2 小时 10 分钟

Kat*_*kko 10

您可以使用扩展为TimeOfDay.

extension TimeOfDayExtension on TimeOfDay {
  TimeOfDay addHour(int hour) {
    return this.replacing(hour: this.hour + hour, minute: this.minute);
  }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以打电话给 TimeOfDay.now().addHour(2)

美东时间。

您甚至可以将上述方法改进为:

extension TimeOfDayExtension on TimeOfDay {
  TimeOfDay add({int hour = 0, int minute = 0}) {
    return this.replacing(hour: this.hour + hour, minute: this.minute + minute);
  }
}
Run Code Online (Sandbox Code Playgroud)

你可以打电话: TimeOfDay.add(hour: 2, minute: 30)

  • 嘿 Katekko,欢迎来到 StackOverflow!我对你的答案做了一些编辑。我强烈建议您使用 StackOverflow 的格式化代码功能而不是代码图像,以便其他人可以更轻松地测试您的解决方案。 (3认同)

gun*_*ess 8

我有同样的需求,然后我在 Kotlin 上检查了另一个库的来源,将他们的解决方案移植如下:

extension TimeOfDayExtension on TimeOfDay {
  // Ported from org.threeten.bp;
  TimeOfDay plusMinutes(int minutes) {
    if (minutes == 0) {
      return this;
    } else {
      int mofd = this.hour * 60 + this.minute;
      int newMofd = ((minutes % 1440) + mofd + 1440) % 1440;
      if (mofd == newMofd) {
        return this;
      } else {
        int newHour = newMofd ~/ 60;
        int newMinute = newMofd % 60;
        return TimeOfDay(hour: newHour, minute: newMinute);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

其他解决方案不考虑超过 60 分钟或 24 小时。尝试添加 1 分钟23:59会导致崩溃。但是,这个安全地将其强制转换为00:00.


yva*_*den 8

如果您只需要一次并且认为扩展太麻烦,您可以这样做:

TimeOfDay.fromDateTime(DateTime.now().add(Duration(minutes: 10)))
Run Code Online (Sandbox Code Playgroud)

使用时间选择器的更详细示例:

TimeOfDay selectedTime = await showTimePicker(
    context: context,
    initialTime: TimeOfDay.fromDateTime(DateTime.now().add(Duration(minutes: 10))),
);
Run Code Online (Sandbox Code Playgroud)


Tho*_*med 5

我希望,它会有所帮助。根据需要我们可以更改代码

void changeEndTime(TimeOfDay startTimeOfDay) {
    DateTime today = DateTime.now();
    DateTime customDateTime = DateTime(today.year, today.month, today.day,
        startTimeOfDay.hour, startTimeOfDay.minute);
    endTimeOfDay =
        TimeOfDay.fromDateTime(customDateTime.add(Duration(minutes: 90)));
  }
Run Code Online (Sandbox Code Playgroud)


Pra*_*nde 3

TimeOfDay _time = TimeOfDay.now();
Run Code Online (Sandbox Code Playgroud)

我们可以这样做

TimeOfDay newTime = _time.replacing(
        hour: _time.hour - 2,
        minute: _time.minute
      );
Run Code Online (Sandbox Code Playgroud)