Dart/Flutter中如何提取MySQL时间戳中的日期与时间
时间戳格式转换实现方案
针对你需要将ISO格式的时间戳2021-08-11T11:38:09.000Z转换为2021-08-11 11:38格式的需求,有两种常用实现方式:
方案1:正则替换(匹配你的原有实现思路)
你可以通过替换冗余字符或者捕获有效部分得到目标格式,Dart实现代码如下:
// 方式1:两步替换,逻辑更易懂 final String? shortime = timestamp?.replaceAll(RegExp(r':\d{2}\.\d{3}Z'), '')?.replaceAll('T', ' ') ?? ''; // 方式2:单次正则映射替换 final String? shortime = timestamp?.replaceAllMapped( RegExp(r'(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}):.*'), (match) => '${match.group(1)} ${match.group(2)}', ) ?? '';
方案2:时间类解析转换(更推荐,容错性更高)
正则方案对输入格式的要求很严格,一旦输入格式有微小变动就会失效,更稳妥的方式是先将字符串解析为DateTime对象,再格式化输出:
import 'package:intl/intl.dart'; DateTime? dateTime = timestamp != null ? DateTime.tryParse(timestamp!) : null; final String shortime = dateTime != null ? DateFormat('yyyy-MM-dd HH:mm').format(dateTime) : '';
该方案会自动兼容ISO标准时间的各类格式变体,如果你需要转换为本地时区展示,只需要在format前调用toLocal()方法即可。
内容的提问来源于stack exchange,提问作者Meggy
相关产品推荐
相关产品推荐

