You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:33:57