如何将颤抖的 TimeOfDay 保存到 firebase?

How to save flutter TimeOfDay to firebase?

我正在开发一个 flutter 应用程序,我正在使用这个插件显示 TimeRangepicker:time_range_picker 并且我得到 TimeOfDay(09:00) + TimeOfDay(12:00) 作为使用此代码的结果:

  onPressed: () async {
                        TimeRange result = await showTimeRangePicker(
                            use24HourFormat: false,
                            interval: Duration(minutes: 30),
                            context: context,
                            start: TimeOfDay(hour: 9, minute: 0),
                            end: TimeOfDay(hour: 12, minute: 0),
                            disabledTime: TimeRange(
                                startTime: TimeOfDay(hour: 23, minute: 0),
                                endTime: TimeOfDay(hour: 5, minute: 0)),
                            disabledColor: Colors.red.withOpacity(0.5),
                            strokeWidth: 4,
                            ticks: 24,
                            ticksOffset: -7,
                            ticksLength: 15,
                            ticksColor: Colors.grey,
                            labels: [
                              "12 pm",
                              "3 am",
                              "6 am",
                              "9 am",
                              "12 am",
                              "3 pm",
                              "6 pm",
                              "9 pm"
                            ].asMap().entries.map((e) {
                              return ClockLabel.fromIndex(
                                  idx: e.key, length: 8, text: e.value);
                            }).toList(),
                            labelOffset: 35,
                            rotateLabels: false,
                            padding: 60);

                        print("${result.startTime} + ${result.endTime}");
                      },

但唯一的问题是我可以找到一种合适的方法将其保存到 firebase,我不需要 date 我只需要 TimeOfDay。

Firestore 中没有用于存储时间的特定数据类型,因此您必须将其映射到现有类型之一。

一些常见的映射是:

  • 将一天中的时间存储为字符串值,例如“07:55:00.000”(如果您关心毫秒精度)
  • 将一天中的时间存储为与午夜的偏移量,例如 28500(作为从午夜到 7:55 AM 的秒数)
  • 将一天中的时间存储为 Timestamp 字段中固定日期的时间部分。这本质上是先前方法的变体,偏移量来自 start of the epoch。假设您选择纪元的开始(1970 年 1 月 1 日)作为固定日期,那么时间戳的值将为 28500000(以毫秒为单位)。

所有这些都有有效的用例,因此请选择最适合您的应用用例的一个。

在只需要小时和分钟的常见用例中,这些值的简单映射就足够了。

Map timeOfDayToFirebase(TimeOfDay timeOfDay){
    return {
        'hour':timeOfDay.hour,
        'minute':timeOfDay.minute
           }
}


TimeOfDay firebaseToTimeOfDay(Map data){
        return TimeOfDay(
            hour: data['hour'],
            minute: data['minute']);
}



var myTimeOfDayObject=TimeOfDay.now();
firebase.update({'time': timeOfDayToFirebase(myTimeOfDayObject)});

这样您就不必担心管理偏移量、意外的语言环境更改等问题。