flutter dart :如何增加或减少小时和分钟的时间

pgx2nnw8  于 2023-03-04  发布在  Flutter
关注(0)|答案(9)|浏览(297)

以下行将给予当前时间

TimeOfDay _time = TimeOfDay.now(); //12:42

我想从_time //添加或删除2小时10分钟,例如12:52或10:52...等

stszievb

stszievb1#

可以使用扩展为TimeOfDay添加方法。

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

所以你可以像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);
  }
}

您可以拨打:TimeOfDay.add(hour: 2, minute: 30)

czq61nw1

czq61nw12#

我有同样的需求,然后我检查了Kotlin上另一个library的源代码,并如下所示移植了他们的解决方案:

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);
      }
    }
  }
}

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

2w3rbyxf

2w3rbyxf3#

我希望,这将是有益的。根据需要,我们可以改变代码

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)));
  }
xesrikrc

xesrikrc4#

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

TimeOfDay.fromDateTime(DateTime.now().add(Duration(minutes: 10)))

时间选择器的更简洁示例:

TimeOfDay selectedTime = await showTimePicker(
    context: context,
    initialTime: TimeOfDay.fromDateTime(DateTime.now().add(Duration(minutes: 10))),
);
2mbi3lxu

2mbi3lxu5#

TimeOfDay _time = TimeOfDay.now();

我们可以这样做

TimeOfDay newTime = _time.replacing(
        hour: _time.hour - 2,
        minute: _time.minute
      );
c7rzv4ha

c7rzv4ha6#

我写了另一个扩展,可能更简单一点。我也记住了60分钟的溢出:

TimeOfDay add({int hours = 0, int minutes = 0}) => TimeOfDay(hour: hour + hours + minutes ~/ 60, minute: minute + minutes % 60);

这里,minutehour取自被覆盖的对象,如this.hourthis.minute

n6lpvg4x

n6lpvg4x7#

对之前的答案进行了一些修改,以调整分钟数超过60的时间。
你可以把它作为一个单独的文件添加到你的项目中,然后在一天中的任何时间调用add方法,只要记住它返回一个新的TimeOfDay,并且不修改现有的TimeOfDay。

import 'package:flutter/material.dart';

extension TimeOfDayExtension on TimeOfDay {
  TimeOfDay add({int hours = 0, int minutes = 0}) => TimeOfDay(
      hour: hour + hours + (minute + minutes) ~/ 60,
      minute: (minute + minutes) % 60);
}
cidc1ykv

cidc1ykv8#

如果你想从当前时间减去2小时,你可以使用"TimeOfDay. fromDateTime()"得到它
一天中的时间。从日期时间(www.example.com())减去(持续时间(小时:DateTime.now().subtract(Duration(hours: 2)));
如果要在当前时间上增加2小时
一天中的时间。fromDateTime(www.example.com(). add(持续时间(小时:DateTime.now().add(Duration(hours: 2)));

nnvyjq4y

nnvyjq4y9#

我希望你能从中得到帮助

相关问题