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

San*_*.91 4 dart flutter

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

dateTimeFromString(json['dateTime'], "yyyyMMddHHmmss")
Run Code Online (Sandbox Code Playgroud)

例外是:

FormatException: Trying to read MM from 20180623130424 at position 14
Run Code Online (Sandbox Code Playgroud)

可能是什么原因?

Pat*_*kal 72

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);
Run Code Online (Sandbox Code Playgroud)

=> 日期时间到字符串

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

参考链接:


Ric*_*eap 23

intl DateFormat由于没有任何分隔符,因此无法处理您的输入字符串。整个字符串将作为年份消耗掉。但是DateTime.parse确实(几乎)对此进行了处理。碰巧恰好期望您拥有(几乎是几乎同样)的格式。

可接受的样式之一parse20120227T132700,其区别仅在于T日期/时间分隔符。

尝试这个:

String date = '20180626170555';
String dateWithT = date.substring(0, 8) + 'T' + date.substring(8);
DateTime dateTime = DateTime.parse(dateWithT);
Run Code Online (Sandbox Code Playgroud)


win*_*ter 18

您可以使用 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")
Run Code Online (Sandbox Code Playgroud)

检查这里的文档。


Ana*_*nan 14

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

  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
Run Code Online (Sandbox Code Playgroud)


D V*_*esh 9

转换"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)
Run Code Online (Sandbox Code Playgroud)

输出 01/26/2021 03:17 AM


aaD*_*Dev 7

文档中,您需要 SingleMmonth in year

dateTimeFromString(json['dateTime'], "yMdHms")
Run Code Online (Sandbox Code Playgroud)