在Flutter中如何将Unix时间戳转换为ISO 8601格式日期
Flutter 毫秒级Unix时间戳转ISO 8601格式解决方案
错误原因
DateTime.parse() 方法仅支持解析符合ISO 8601规范的日期字符串,无法直接解析Unix时间戳格式的纯数字字符串,这是你收到FormatException报错的核心原因。
解决方法
你收到的1611694800000是毫秒级的Unix时间戳,需要先将字符串转为int类型,再调用DateTime专门的时间戳构造函数处理即可,代码示例如下:
String s = '1611694800000'; debugPrint("接收的日期是: $s"); // 字符串转int类型的毫秒时间戳 int timestamp = int.parse(s); // 构造UTC时区的DateTime对象,需要本地时区则去掉isUtc参数 DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp, isUtc: true); // 直接转标准ISO 8601格式 String isoDate = dateTime.toIso8601String(); debugPrint("转换后的ISO日期: $isoDate"); // 如需将末尾的Z替换为+00:00格式,做简单替换即可 String finalDate = isoDate.replaceFirst('Z', '+00:00'); debugPrint("最终期望格式日期: $finalDate");
运行后输出的finalDate就是你需要的2021-01-26T22:00:00.000+00:00。
补充说明
- 若你拿到的是秒级Unix时间戳,改用
DateTime.fromMicrosecondsSinceEpoch()构造函数即可 - 原有代码中的切割、拼接、截取逻辑完全多余,
toIso8601String()方法可直接输出标准格式,不需要手动处理
内容的提问来源于stack exchange,提问作者arriff
相关产品推荐
相关产品推荐

