Flutter/Dart:如何将"01 January 2020"格式日期转为纪元毫秒数?
更优的日期转纪元毫秒数方案(针对"01 January 2020"格式)
你当前手动维护月份映射表、截取字符串的方式不仅容易出错(比如你的映射表漏掉了April的对应关系),还不够灵活。Dart里可以借助intl包的DateFormat类,用更简洁可靠的方式实现需求:
步骤1:添加依赖
在pubspec.yaml中引入intl包:
dependencies: intl: ^0.18.1 # 可使用最新版本
步骤2:编写转换代码
import 'package:intl/intl.dart'; void main() { String dateStr = "01 January 2020"; // 匹配"日 月份全称 年"的格式,指定英文 locale 确保月份解析正确 DateFormat dateFormatter = DateFormat("dd MMMM yyyy", "en_US"); DateTime parsedDate = dateFormatter.parse(dateStr); // 获取纪元以来的毫秒数 int millis = parsedDate.millisecondsSinceEpoch; print(millis); // 输出:1577836800000 }
为什么这是更优方案
- 无需手动维护月份映射,彻底避免遗漏、拼写错误这类低级问题
- 内置方法自动处理各种边界场景(比如日期无前置零、不同长度的月份名称)
- 代码可读性更强,后续如果要支持其他日期格式或语言,只需调整
DateFormat的参数即可
原方案的潜在问题
你的代码存在几个隐患:
- 月份映射表缺失了
April(对应Apr)的条目,遇到"01 April 2020"这类日期会直接报错 - 依赖固定字符串位置截取,若输入格式稍有变化(比如日期写成"1 January 2020"),截取逻辑就会失效
内容的提问来源于stack exchange,提问作者Akash Sinha
相关产品推荐
相关产品推荐

