无法将 yyyyMMddHHmmss 格式的字符串日期转换为 DateTime dart

Posted

技术标签:

【中文标题】无法将 yyyyMMddHHmmss 格式的字符串日期转换为 DateTime dart【英文标题】:unable to convert string date in Format yyyyMMddHHmmss to DateTime dart 【发布时间】:2018-12-05 03:49:35 【问题描述】:

我有一个包含日期的字符串,格式为 yyyyMMddHHmmss(例如)(20180626170555),我正在使用以下代码将其转换为日期时间

dateTimeFromString(json['dateTime'], "yyyyMMddHHmmss")

例外是:

FormatException: Trying to read MM from 20180623130424 at position 14

可能是什么原因?

【问题讨论】:

【参考方案1】:

从docs,你需要单Mmonth in year

dateTimeFromString(json['dateTime'], "yMdHms")

【讨论】:

dart 文档不是很清楚! : Number:最小位数。较短的数字在此数量上补零(例如,如果“m”产生“6”,“mm”产生“06”)。 您的解决方案给出:FormatException: Trying to read M from 20180623130424 at position 14【参考方案2】:

intl DateFormat 无法处理您的输入字符串,因为它没有任何分隔符。整个字符串作为年份被消耗。但是DateTime.parse 确实(几乎)解决了这个问题。它恰好期望您拥有的格式(再次,几乎)。

parse 可接受的样式之一是 20120227T132700,它的区别只是 T 日期/时间分隔符。

试试这个:

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

【讨论】:

【参考方案3】:

Flutter 中如何将 String 转换为 Date 和 Date 为 string 的基本信息。看看下面的链接

https://quickstartflutterdart.blogspot.com/2018/10/how-to-convert-string-to-date-and-date.html

可能会对其他人有所帮助。

【讨论】:

【参考方案4】:

您可以使用 DateFormat 将 DateTime 从字符串解析为对象

// With en_US locale by default
var newDateTimeObj = new DateFormat().add_yMd().add_Hms().parse("7/10/1996 10:07:23")
// with a defined format
var newDateTimeObj2 = new DateFormat("dd/MM/yyyy HH:mm:ss").parse("10/02/2000 15:13:09")

查看文档here。

【讨论】:

【参考方案5】:

DateTime.parse("string date here") 只接受一些格式化的字符串。检查以下接受字符串的示例。

"2012-02-27 13:27:00" "2012-02-27 13:27:00.123456789z" "2012-02-27 13:27:00,123456789z" "20120227 13:27:00" "20120227T132700" "20120227" "+20120227" "2012-02-27T14Z" "2012-02-27T14+00:00" "-123450101 00:00:00 Z":在-12345年。 "2002-02-27T14:00:00-0500":同"2002-02-27T19:00:00Z"

=> 字符串到日期时间

DateTime tempDate = new DateFormat("yyyy-MM-dd hh:mm:ss").parse(savedDateString);

=> 日期时间到字符串

String date = DateFormat("yyyy-MM-dd hh:mm:ss").format(DateTime.now());

参考链接:

intl 用于flutter 包中的DateFormat (https://pub.dev/packages/intl) DateTime.parse() => https://api.dart.dev/stable/2.7.2/dart-core/DateTime/parse.html

【讨论】:

【参考方案6】:

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 转换为'MM/dd/yyyy hh:mm a'

date = '2021-01-26T03:17:00.000000Z';
DateTime parseDate =
    new DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(date);
var inputDate = DateTime.parse(parseDate.toString());
var outputFormat = DateFormat('MM/dd/yyyy hh:mm a');
var outputDate = outputFormat.format(inputDate);
print(outputDate)

输出 2021 年 1 月 26 日上午 03:17

【讨论】:

【参考方案7】:

将字符串转换为日期格式的简单方法是

  print(DateTime.parse('2020-01-02')); // 2020-01-02 00:00:00.000
  print(DateTime.parse('20200102')); // 2020-01-02 00:00:00.000
  print(DateTime.parse('-12345-03-04')); // -12345-03-04 00:00:00.000
  print(DateTime.parse('2020-01-02 07')); // 2020-01-02 07:00:00.000
  print(DateTime.parse('2020-01-02T07')); // 2020-01-02 07:00:00.000
  print(DateTime.parse('2020-01-02T07:12')); // 2020-01-02 07:12:00.000
  print(DateTime.parse('2020-01-02T07:12:50')); // 2020-01-02 07:12:50.000
  print(DateTime.parse('2020-01-02T07:12:50Z')); // 2020-01-02 07:12:50.000Z
  print(DateTime.parse('2020-01-02T07:12:50+07')); // 2020-01-02 00:12:50.000Z
  print(DateTime.parse('2020-01-02T07:12:50+0700')); // 2020-01-02 00:12:50.00
  print(DateTime.parse('2020-01-02T07:12:50+07:00')); // 2020-01-02 00:12:50.00

【讨论】:

以上是关于无法将 yyyyMMddHHmmss 格式的字符串日期转换为 DateTime dart的主要内容,如果未能解决你的问题,请参考以下文章

java中yyyyMMddHHmmss时间格式怎么转化为yyyy-MM-dd HH:mm:ss

java中yyyyMMddHHmmss时间格式怎么转化为yyyy-MM-dd HH:mm:ss?

sqlserver中将datetime类型转换为yyyyMMddHHmmss格式

WPF将HHMMSS转换为时间格式字符串

将 'yyyymmdd hhmmss' 转换为 'mm/dd/yy hh:mm'

SQL怎么取当前时间是YYYYMMDDHHMMSS格式的?