无法将 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,你需要单M
到month 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格式