Flutter:解析带时区日期格式并转换为本地时区的方法
解决带时区UTC日期的本地格式化问题
针对你从API获取的2022-09-04T13:00:00+00:00格式日期,要转换成September 04, 2022(本地化日期)和13:00(本地时区时间),可以按以下方式处理:
修正你的现有代码
你之前用的+XX:XX格式符是错误的,intl包中对应带冒号的时区偏移(如+00:00)的格式符是ZZZZZ。修正后的代码如下:
import 'package:intl/intl.dart'; // 用ZZZZZ替代+XX:XX匹配时区偏移 var dateValue = DateFormat("yyyy-MM-ddTHH:mm:ssZZZZZ") .parseUTC("2022-09-04T13:00:00+00:00") .toLocal(); // 格式化为September 04, 2022样式(指定en_US确保月份为英文全称) String formattedDate = DateFormat("MMMM dd, yyyy", "en_US").format(dateValue); // 格式化为24小时制的本地时间 String formattedTime = DateFormat("HH:mm").format(dateValue);
说明:
parseUTC确保解析时将字符串视为UTC时间,toLocal()自动转换为设备当前时区的时间- 若需要适配系统语言显示月份,可省略格式化日期时的
"en_US"参数
更优实现方案
Dart内置的DateTime.parse可以直接解析ISO 8601格式的日期字符串(包括带时区偏移的),无需借助intl包解析,代码更简洁高效:
import 'package:intl/intl.dart'; // 直接用DateTime.parse解析标准ISO格式字符串 DateTime utcDate = DateTime.parse("2022-09-04T13:00:00+00:00"); // 转换为本地时区时间 DateTime localDate = utcDate.toLocal(); String formattedDate = DateFormat("MMMM dd, yyyy").format(localDate); String formattedTime = DateFormat("HH:mm").format(localDate);
内容的提问来源于stack exchange,提问作者bragi
相关产品推荐
相关产品推荐

