Flutter设置时区时提示Asia/Yangon位置不存在该如何解决
问题根因
- 你使用的
timezone包内置的IANA时区数据库版本过低,未收录Asia/Yangon这个时区标识符:缅甸时区历史上曾长期使用Asia/Rangoon作为标准ID,后续才更新为Asia/Yangon,旧版tz数据库未同步该变更 flutter_native_timezone返回的是当前操作系统原生层返回的最新时区ID,二者ID不匹配就会抛出找不到对应位置的异常
修复方案
- 第一步:升级
timezone依赖到最新正式版,修改pubspec.yaml中对应依赖的版本号,升级后执行flutter pub get重启项目即可,新版tz数据库已经收录了Asia/Yangon标识 - 第二步:添加兼容兜底逻辑,避免部分冷门时区/旧设备依然出现匹配失败问题,可直接使用下方修复后的代码:
Future<void> _configureLocalTimeZone() async { tz.initializeTimeZones(); // 时区别名映射表,可按需补充其他存在别名的时区ID final Map<String, String> timeZoneAlias = { 'Asia/Yangon': 'Asia/Rangoon', // 可补充其他需要兼容的时区映射 }; final String originalTimeZone = await FlutterNativeTimezone.getLocalTimezone(); String targetTimeZone = timeZoneAlias[originalTimeZone] ?? originalTimeZone; try { tz.setLocalLocation(tz.getLocation(targetTimeZone)); } catch (e) { // 匹配失败时使用兜底时区,也可根据业务需求调整兜底逻辑 debugPrint('时区匹配失败,使用兜底时区:$e'); tz.setLocalLocation(tz.getLocation('Asia/Bangkok')); } }
内容的提问来源于stack exchange,提问作者Neural
相关产品推荐
相关产品推荐

