无法使用Dart中的Intl的DateFormat解析yyyyMMdd

问题描述

我有一个类似“ 20200814”的日期字符串,表示2020年第8个月的第14天。

在国际文档中,它是这样说的:

class CPerson { private: char* Name; enum class Gender { Male = 0,Female = 1 }; Gender sex; public: CPerson(const char* szName,Gender s) :Name{ nullptr } { Name = new char[strlen(szName) + 1]; strcpy(Name,szName); sex =s ; } void main(){ Cperson("Simon",?????); }

所以,如果我使用这个:

'yyyy.MM.dd G 'at' HH:mm:ss vvvv' 1996.07.10 AD at 15:08:56 Pacific Time

它必须可以工作,但是会抛出此错误:

DateFormat('yyyyMMdd').parse('20200814')

解决方法

我看过了intl源代码,不幸的是该库不支持解析日期字符串,其中包含不由非数字字符分隔的数字分量。

这样做的原因是parse(input)将输入字符串转换为流,并且在尝试提取年份值时,它将在输入上调用_Stream实例方法_Stream.nextInteger()流,然后使用整个字符串,因为可以将整个字符串读取为单个整数。这将流中的任何内容都解析为月或日,这就是引发错误的原因。

,

@Michael Horn 所述,package:intlDateFormat 库不支持解析日期字符串,除非它们以字符分隔。

在这种情况下,解析器将所有输入的数字视为年份,因此尝试根据模式查找月份时会出错。

所以我们必须在输入之间放置一些分隔符。

String input = '20210701';
/// convert 20210701 to 2021/07/01
String newInput = '${input.substring(0,4)}/${input.substring(4,6)}/${input.substring(6,8)}';
DateTime date = DateFormat('yyyy/MM/dd').parse(newInput);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...