【问题标题】:Dart / Flutter: I am trying to convert a String to a Date but getting an ExceptionDart / Flutter:我正在尝试将字符串转换为日期,但出现异常
【发布时间】:2020-09-08 20:14:52
【问题描述】:

在我的应用中,在某些情况下,JSON 中的 date 字段无效。我不想显示“无效日期”,而是想显示另一个名为 timestamp 的字段。但是,此字段采用以下格式:20200518100014。我想把它转换成May 18, 2020

我没有成功,这是我拥有的最新代码

String processDate(data) {
    var timeStamp = DateFormat("MMM dd, yyyy").parse(data.timestamp.toString());
    return data.date == 'Invalid date' ? timeStamp : data.date;
}

这会导致以下错误:

如何解决此问题以将日期显示为 May 18, 2020 格式。


回答

根据下面的@Lunedor 回答,我能够创建以下解决方案:

String processDate(data) {
    String date = data.timestamp.toString();
    String dateWithT = date.substring(0, 8) + 'T' + date.substring(8);
    String dateTime = DateFormat("MMM dd, yyyy").format(DateTime.parse(dateWithT));

    return data.date == 'Invalid date' ? dateTime : data.date;
}

【问题讨论】:

  • 你犯了一个小错误..应该是..String processDate(data) { return data.date == 'Invalid date' ? DateFormat("mm, dd, yyyy").parse(data.timestamp.toString()) : data.date; }..你给了MMM而不是mm..希望它能解决你的问题..不确定它是否有效..试一试..
  • 感谢您的反馈。我仍然收到错误:FormatException: Trying to read from 20200518100014 at position 15

标签: flutter dart


【解决方案1】:

我正在跳过 MMM 错误,请查看此答案以查看可以将哪种类型的字符串解析为时间和日期:

https://stackoverflow.com/a/60988096/12880676

你的情况可以使用answer中的方法。 我只是复制粘贴代码:

String date = '20180626170555';
String dateWithT = date.substring(0, 8) + 'T' + date.substring(8);
DateTime dateTime = DateTime.parse(dateWithT);

【讨论】:

  • 根据您的回答,我能够创建一个解决方案。请参阅问题以获取解决方案。顺便说一句:MMM 是我唯一能找到的用 3 个字母(May、Feb、Jun 等)格式化月份的东西。为什么错了?
  • MMM 并没有错,实际上只是 MM 更常见,所以如果是您选择,当然使用它也没有错。
猜你喜欢
  • 2020-04-11
  • 2017-03-16
  • 2021-10-06
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
相关资源
最近更新 更多