Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 用于格式化日期和时间的Dart函数_String_Flutter_Dart - Fatal编程技术网

String 用于格式化日期和时间的Dart函数

String 用于格式化日期和时间的Dart函数,string,flutter,dart,String,Flutter,Dart,如何使用Dart创建一个函数,将类似于'11082020_150258'的内容转换为类似于'2020年8月11日'和'3:02 PM'的日期和时间?首先,可以使用正则表达式解析文本: RegExp exp = new RegExp(r"\d{2}"); 正则表达式\d{2}与字符串的每两位匹配。然后,您可以创建一个列表来存储这组数字: Iterable<Match> matches = exp.allMatches('11082020_150258'); var

如何使用Dart创建一个函数,将类似于
'11082020_150258'
的内容转换为类似于
'2020年8月11日'
'3:02 PM'
的日期和时间?

首先,可以使用正则表达式解析文本:

RegExp exp = new RegExp(r"\d{2}");
正则表达式
\d{2}
与字符串的每两位匹配。然后,您可以创建一个列表来存储这组数字:

Iterable<Match> matches = exp.allMatches('11082020_150258');
var list = matches.map((m) => m.group(0)).toList();
获取字符串的时间部分:

String dateStr = list.sublist(0, 3).join('/') + list[3].toString();
String timeStr = list.sublist(4).join(':');
从字符串创建
DateTime
对象(使用
DateFormat
from)

您可以使用此
DateTime
。如果您想以问题中提到的格式打印(即2020年8月11日下午3:02):

完整代码:

RegExp exp = new RegExp(r"\d{2}");
Iterable<Match> matches =
exp.allMatches('11082020_150258');
var list =
matches.map((m) => m.group(0)).toList();
String dateStr =
    list.sublist(0, 3).join('/') + list[3].toString();
String timeStr = list.sublist(4).join(':');
var parsedDate = DateFormat('dd/M/yyyy HH:mm:ss')
    .parse(dateStr + ' ' + timeStr);
DateFormat format =
new DateFormat('d MMMM yyyy, HH:mm a', 'en_US');
print(format.format(parsedDate));
RegExp-exp=newregexp(r“\d{2}”);
可匹配=
exp.allMatches('11082020_150258');
变量表=
matches.map((m)=>m.group(0)).toList();
字符串dateStr=
list.sublist(0,3).join('/')+list[3].toString();
字符串timeStr=list.sublist(4.join(“:”);
var parsedDate=DateFormat('dd/M/yyyy HH:mm:ss')
.parse(dateStr+''+timeStr);
日期格式=
新的日期格式('d MMMM yyyy,HH:mm a','en_US');
打印(format.format(parsedDate));

首先需要将字符串解析为
DateTime
对象。不幸的是,从
package:intl
,您需要手动解析它。可以使用正则表达式:

var timestampString='11082020_150258';
var re=RegExp(
r'^'
r'(?\d{2})'
r'(?\d{2})'
r'(?\d{4})'
r''
r'(?\d{2})'
r'(?\d{2})'
r'(?\d{2})'
r‘$’,
);
var match=re.firstMatch(timestampString);
if(match==null){
抛出FormatException(“无法识别的时间戳格式”);
}
var dateTime=dateTime(
int.parse(match.namedGroup('year')),
int.parse(match.namedGroup('month')),
int.parse(match.namedGroup('day')),
int.parse(match.namedGroup('hour')),
int.parse(match.namedGroup('minute')),
int.parse(match.namedGroup('second')),
);
拥有
DateTime
对象后,可以使用
DateFormat
对其进行格式化:

var dateString=DateFormat('d MMMM yyyy')。格式(dateTime);
var timeString=DateFormat('h:mm a')。format(dateTime);
打印(日期字符串);//打印日期:2020年8月11日
打印(时间字符串);//打印时间:下午3:02
DateFormat format = new DateFormat('d MMMM yyyy, HH:mm a', 'en_US');
print(format.format(parsedDate));
RegExp exp = new RegExp(r"\d{2}");
Iterable<Match> matches =
exp.allMatches('11082020_150258');
var list =
matches.map((m) => m.group(0)).toList();
String dateStr =
    list.sublist(0, 3).join('/') + list[3].toString();
String timeStr = list.sublist(4).join(':');
var parsedDate = DateFormat('dd/M/yyyy HH:mm:ss')
    .parse(dateStr + ' ' + timeStr);
DateFormat format =
new DateFormat('d MMMM yyyy, HH:mm a', 'en_US');
print(format.format(parsedDate));