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

8nuwlpux  于 2022-12-20  发布在  其他
关注(0)|答案(9)|浏览(160)

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

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

例外情况是:

FormatException: Trying to read MM from 20180623130424 at position 14

原因何在?

rn0zuynd

rn0zuynd1#

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());

参考链接:

wz8daaqr

wz8daaqr2#

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);
piwo6bdm

piwo6bdm3#

"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 AM

8yoxcaq7

8yoxcaq74#

可以使用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

ybzsozfc

ybzsozfc5#

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

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
yizd12fk

yizd12fk6#

docs开始,您需要将单个M转换为month in year

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

kyks70gy7#

关于如何在flutter中将字符串转换为日期和将日期转换为字符串的基本信息。
https://quickstartflutterdart.blogspot.com/2018/10/how-to-convert-string-to-date-and-date.html
可能会对其他人有所帮助。

wmomyfyw

wmomyfyw8#

我做了类似的事情(使用intl包)

final date = '7/10/1996';
final month = DateFormat.LLLL().format(DateTime.parse(date));

上面代码中的LLLL是表示“独立月份”的日期格式 backbone ,其他日期格式化程序为here

7z5jn7bk

7z5jn7bk9#

String startdate1="10/31/2022";
String endate1="11/02/2022";

DateTime start = new DateFormat("MM/dd/yyyy").parse(startdate1); 
DateTime end = new DateFormat("MM/dd/yyyy").parse(enddate1);
DateTime s = DateTime(start.year, start.month, start.day);
DateTime to = DateTime(end.year, end.month, end.day);
int day= (to.difference(s).inHours / 24).round()+1;

相关问题