如何解决Dart函数,用于格式化日期和时间
如何创建使用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,'en_US');
print(format.format(parsedDate));
,
您首先需要将字符串解析为DateTime
对象。不幸的是,package:intl
DateFormat
中的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。