将 DateTime 序列化为时间戳以用于 Firestore 颤动

Posted

技术标签:

【中文标题】将 DateTime 序列化为时间戳以用于 Firestore 颤动【英文标题】:Serializing DateTime to Timestamp for firestore flutter 【发布时间】:2021-05-01 00:54:29 【问题描述】:

我有一个模型类

import 'package:cloud_firestore/cloud_firestore.dart';

class Available
 String uid;
 DateTime date;
 int stock;
 bool isAvailable;

 Available(this.date,this.uid,this.stock,this.isAvailable);


  Available.fromJson(Map<String, dynamic> json)
       : uid = json['UID'],
       date = DateTime.parse(json['date'].toDate().toString()),
     stock = json['stock'],
    isAvailable = json["isAvailable"];

 Map<String, dynamic> toJson() 
   return 
    'UID': uid,
    'date': date,
    'stock': stock,
    'isAvailable': isAvailable,
   ;
 

我有一个可用对象列表,当我尝试将列表编码为 json 并将其存储到 firestore 时,由于 DateTime 对象,我似乎无法做到这一点

注意: 我正在像这样更新整个列表:

var json = jsonEncode(value.map((e) => e.toJson()).toList(),toEncodable: myDateSerializer);

    FirebaseFirestore.instance.collection("Availability").doc(element.pid).update(
      "dates":jsonDecode(json)
    );

但我需要将每个对象的所有日期存储为 Firestore 时间戳 因此使用 date.toIso8601String() 或 date.microsecondsSinceEpoch 将不起作用,因为它不是 Firestore 时间戳格式。

【问题讨论】:

【参考方案1】:

至少使用 Firebase,您可以直接存储 DateTime 对象。

我认为您的更新会使 json 标记加倍。只需通过更新日期:update("dates":myDate

【讨论】:

"dates" 是一个对象数组,json 是一个对象列表,每个对象都有多个数据项,其中数据是一个日期时间变量 一条错误消息和您的 toJson 可能会有所帮助。这就是我是一个包含 DateTime 变量的对象的方式:final taskJsonList = tasks.map((t) =&gt; t.toEntity().toMap()).toList();。我猜,t.toEntity().toMap() 是你的toJson(),它会创建一个包含"changeDate": changeDate 之类的地图

以上是关于将 DateTime 序列化为时间戳以用于 Firestore 颤动的主要内容,如果未能解决你的问题,请参考以下文章

将纪元时间转换为时间戳颤动

如何将日期时间转换为时间戳 Python

Python pandas 通过 dt 访问器有效地将日期时间转换为时间戳

急!将mysql中日期转化为时间戳

如何将日期转换为时间戳?

将日期 unix 转换为时间戳