Flutter中如何将dd-MM-yyyy HH:mm格式的字符串日期转换为时间戳
Flutter自定义格式字符串转毫秒级时间戳实现
前置说明
Dart内置的DateTime.parse仅支持ISO 8601标准格式的字符串解析,针对你使用的dd-MM-yyyy HH:mm自定义格式(示例字符串为var stringDate = '27-04-2021 19:45'),直接使用内置方法会触发格式解析异常,需要借助格式化工具完成转换。
推荐实现方案
使用官方维护的intl包完成格式匹配与解析,步骤如下:
- 在项目
pubspec.yaml的依赖段添加intl库,执行flutter pub get拉取依赖 - 导入格式化工具:
import 'package:intl/intl.dart'; - 按照字符串的实际格式初始化
DateFormat实例,注意格式占位符要和字段一一对应 - 解析字符串得到
DateTime实例后,直接读取其millisecondsSinceEpoch属性即可拿到目标毫秒时间戳
完整示例代码
import 'package:intl/intl.dart'; void getTimestamp() { var stringDate = '27-04-2021 19:45'; // 格式:dd-MM-yyyy HH:mm // 匹配字符串格式初始化格式化器 DateFormat customFormat = DateFormat('dd-MM-yyyy HH:mm'); // 解析为DateTime对象 DateTime dateTime = customFormat.parse(stringDate); // 获取毫秒级时间戳 int msTimestamp = dateTime.millisecondsSinceEpoch; }
关键注意事项
- 格式占位符的大小写严格区分:大写
MM代表月份,小写mm代表分钟,混淆占位符会导致解析结果完全错误 parse方法默认按照设备本地时区解析时间字符串,如果需要按UTC时区解析,可替换为parseUTC方法- 如需不引入第三方包实现,可通过手动拆分字符串字段构造
DateTime实例,但该方式容错性差、维护成本高,不推荐生产环境使用手动实现参考:
void manualParse() { var stringDate = '27-04-2021 19:45'; final dateSeg = stringDate.split(' ')[0].split('-'); final timeSeg = stringDate.split(' ')[1].split(':'); final dateTime = DateTime( int.parse(dateSeg[2]), // 年 int.parse(dateSeg[1]), // 月 int.parse(dateSeg[0]), // 日 int.parse(timeSeg[0]), // 时 int.parse(timeSeg[1]), // 分 ); final timestamp = dateTime.millisecondsSinceEpoch; }
内容的提问来源于stack exchange,提问作者joisberg
相关产品推荐
相关产品推荐

