如何在 Dart 中处理“通用”时间? (与具体日期无关)

问题描述 投票:0回答:1

我的应用程序会匹配具有特定爱好的用户。为此,用户通常需要商定定期会议时间。例如“每周五下午 6 点至晚上 10 点”。

存储方面,我想我会采用如下所述的简单方法:如何存储时间值,特别是 Firebase 中的小时和分钟?

"monday":
{
    "start":
    {
        "hour": 7,
        "minute": 30
    },
    "duration":
    {
        "hour": 13,
        "minute": 30
    }
}

但现在的问题是,如何在 Dart/Flutter 中有效地使用这些来显示“从到”时间,而不必像这样基本上重建基本时间计算:

        var times = {
          // Weekday: [startHour, startMin, durationHour, durationMin]
          "Mo": [18, 00, 3, 30],
          "Tu": [18, 30, 4, 00],
        };

        var monday = times["Mo"];
        Text("User's schedule: 'Mo': ${monday![0]}:${monday[1]} - ${calculateEndHour()}");

这似乎不必要地乏味。

我应该将它们全部构建为具有相同固定日期的

DateTime
吗?但持续时间将无法正常工作。

flutter dart datetime time
1个回答
0
投票

使用 Dart/Flutter 中可用的类,这就是我将要进行的方式(确实,这很乏味,至少第一次编写,但至少它不使用一些

1970-01-01
DateTime):你可以使用
 TimeOfDay
类将(小时,分钟)存储在同一个对象中,我想这将是一个好的开始(此类没有任何可用的计算方法,但这就是
extension
的用途)。将“持续时间”存储在
Duration
类中也是有意义的。这样做:

给出扩展方法:

extension TimeOfDayExtensions on TimeOfDay {
  TimeOfDay addDuration(Duration duration) {
    int totalInMinutes = minute + duration.inMinutes;
    int finalMinutes = totalInMinutes % 60;
    int hoursToAdd = (totalInMinutes - finalMinutes) ~/ 60;
    int finalHours = (hour + hoursToAdd) % 24;
    return TimeOfDay(hour: finalHours, minute: finalMinutes);
  }

  String display() {
    return "${hour < 10 ? "0" : ""}${hour.toString()}:${minute < 10 ? "0" : ""}${minute.toString()}";
  }
}

您可以通过以下方式轻松调用它:

TimeOfDay begin = TimeOfDay(hour: 18, minute: 00);
Duration duration = Duration(hours: 3, minutes: 30);
TimeOfDay end = begin.addDuration(duration);
Text("User's schedule: 'Mo': ${end.display()}");
© www.soinside.com 2019 - 2024. All rights reserved.