【发布时间】:2020-12-03 08:33:26
【问题描述】:
如何创建一个函数来使用 Dart 将 '11082020_150258' 之类的内容转换为 '11 August 2020' 和 '3:02 PM' 之类的日期和时间?
【问题讨论】:
如何创建一个函数来使用 Dart 将 '11082020_150258' 之类的内容转换为 '11 August 2020' 和 '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 对象(使用intl package 中的DateFormat)
var parsedDate = DateFormat('dd/M/yyyy HH:mm:ss').parse(dateStr + ' ' + timeStr);
您可以使用此DateTime。如果您想以问题中提到的格式打印(即11 August 2020, 3:02 PM):
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));
【讨论】:
您首先需要将您的字符串解析为DateTime 对象。不幸的是,DateFormat 来自 package:intl does not support parsing timestamps without field separators,所以你需要手动解析它。您可以使用正则表达式:
var timestampString = '11082020_150258';
var re = RegExp(
r'^'
r'(?<day>\d{2})'
r'(?<month>\d{2})'
r'(?<year>\d{4})'
r'_'
r'(?<hour>\d{2})'
r'(?<minute>\d{2})'
r'(?<second>\d{2})'
r'$',
);
var match = re.firstMatch(timestampString);
if (match == null) {
throw FormatException('Unrecognized timestamp format');
}
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').format(dateTime);
var timeString = DateFormat('h:mm a').format(dateTime);
print(dateString); // Prints: 11 August 2020
print(timeString); // Prints: 3:02 PM
【讨论】: