Flutter Dart如何将时间戳1624275605667转换为带GMT时区的指定日期格式
问题原因排查
你运行代码报错的核心原因不是DateFormat参数错误,而是DateTime构造方法用错了:
Dart 中直接调用DateTime(int)单参数构造函数时,入参代表的是年份,不是时间戳。你传入的13位毫秒级时间戳数值远超合法年份范围,所以会抛出异常。
正确的时间戳转DateTime写法:
// 13位毫秒时间戳转DateTime final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(1624275605667); // 如果是10位秒级时间戳,用这个方法 // final DateTime dateTime = DateTime.fromSecondsSinceEpoch(1624275605);
DateFormat格式参数说明
你需要输出的Mon Jun 21 2021 17:10:05 GMT+05:30格式,对应的DateFormat参数就是你写的'EEE MMM d yyyy HH:mm:ss zzz',但需要额外注意两个适配点:
- 要保证输出英文的星期、月份缩写,需要显式指定英文本地化参数
'en_US',避免系统语言为中文时输出中文的周、月标识 zzz格式符就是用来输出GMT±时区偏移的格式,完全匹配你的需求
完整可运行代码示例
import 'package:intl/intl.dart'; void main() { var timestamp = 1624275605667; final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp); // 传入locale参数保证输出英文标识 final DateFormat formatter = DateFormat('EEE MMM d yyyy HH:mm:ss zzz', 'en_US'); final String result = formatter.format(dateTime); print(result); // 输出:Mon Jun 21 2021 17:10:05 GMT+05:30 }
格式符对应含义
EEE:星期的英文缩写(如Mon、Tue)MMM:月份的英文缩写(如Jan、Jun)d:日期(无前导零,如1、21)yyyy:4位年份HH:mm:ss:24小时制的时、分、秒zzz:时区标识,格式为GMT±偏移量(如GMT+05:30)
内容的提问来源于stack exchange,提问作者Preeti Deswal
相关产品推荐
相关产品推荐

