【问题标题】:Flutter get form google sheet but date time can not convertFlutter 获取表单谷歌表格但日期时间无法转换
【发布时间】:2021-03-11 12:43:58
【问题描述】:

我已经设置了颤振项目从我的谷歌表中获取数据,使用 Package gsheets 0.2.6 来获取数据 当我获取数据时,使用打印检查 DateTime ,我可以验证日期时间是否正确,例如“2021-03-11 13:41:05”,但使用时

factory ShpTable.fromGsheets(Map<dynamic, dynamic> json) {
    return ShpTable(
DateTime: DateTime.parse(json['DateTime'].toString()),
)}

我只能像“44265.671747685185”这样观看日期值 我试过用过

DateTime.Parse(json['DateTime'].toString()).toString()

但是得到无效的数据格式

DateTime.tryParse(json['DateTime'].toString() ?? '').toString()

仅反馈无效

我也试过了

DateTime.fromMicrosecondsSinceEpoch(int.Parse(json['DateTime'].toString().trim() )

还是不行。 我该如何解决这个问题?

我的清单

factory ShpTable.fromGsheets(Map<dynamic, dynamic> json) {
    return ShpTable(
      teamsName: json['TeamsName'].toString().trim(),
      teamOrde: json['TeamOrde'].toString().trim(),
      shpt: json['Shpt'].toString().trim(),
      dp: json['DP'].toString().trim(),
      delivery: json['Delivery'].toString().trim(),
      country: json['Country'].toString().trim(),
      items: int.tryParse(json['Items'] ?? ''),
      orde: json['Orde'].toString().trim(),
      shipTo: json['ShipTo'].toString().trim(),
      shipmentNo: json['ShipmentNo'].toString().trim(),
      shipmentDateTime: json['ShipmentDateTime'].toString().trim(),
      serviceStart: json['Service_Start'].toString().trim(),
      serviceEnd: json['Service_End'].toString().trim(),
      kpi: int.tryParse(json['KPI_Hour'] ?? ''),
      status: json['STATUS'].toString().trim() ,
      shpCondition: json['SHPCondition'].toString().trim(),
    );
  }

【问题讨论】:

  • “44265.671747685185”代表什么?如果我将“2021-03-11 13:41:05”转换为时间戳,它看起来像“1615466465000”,因此该值不是 unix 时间戳
  • 但使用 Excel 或 Google 表格,您可以将日期字符串转换为日期值,例如 2021-02-28 Datevalue("2021-02-28") ==> 44255

标签: json flutter datetime


【解决方案1】:

通过在 Google 工作表上使用 Datevalue,您获得的值不是 Unix 时间戳。

我在 Google 表格上发现您可以使用以下公式将字符串日期转换为 Unix 时间戳:

=INT((YOURCELL-("1/1/1970"-"1/1/1900"+2))*86400000)

然后您必须将获得的 unix 时间戳转换为 Flutter 上的 DateTime。

就是这样:

String getDate(int UnixTimestamp){
    DateTime date = DateTime.fromMillisecondsSinceEpoch(UnixTimestamp);
    return date.toString();
  }

【讨论】:

    【解决方案2】:

    感谢我总结了上面对以下代码的回答,并且不需要谷歌表中的额外单元格。它只能通过颤振代码完成:

    d=DateTime.fromMillisecondsSinceEpoch(((double.parse(YOURCELLVALUE)-25569)*86400000).toInt(),isUtc: true);
    
    
     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2012-03-23
      • 1970-01-01
      相关资源
      最近更新 更多