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

在Flutter时间应用中如何获取城市、所属国家及GMT时区信息?

解决本地时间应用的时区信息获取问题

方案1:从现有时区ID解析+DateTime获取GMT偏移

你通过flutter_native_timezone拿到的时区ID(如Asia/Shanghai)本身包含区域和城市信息,结合Dart的DateTime类就能获取GMT偏移:

import 'package:flutter_native_timezone/flutter_native_timezone.dart';
import 'package:intl/intl.dart';

Future<void> fetchTimezoneDetails() async {
  // 获取本地时区ID
  final timezoneId = await FlutterNativeTimezone.getLocalTimezone();
  
  // 拆分时区ID提取区域和城市
  final parts = timezoneId.split('/');
  final region = parts[0];
  final city = parts.length > 1 ? parts[1].replaceAll('_', ' ') : '';
  
  // 获取GMT偏移字符串
  final now = DateTime.now();
  final offsetHours = now.timeZoneOffset.inHours;
  final gmtString = 'GMT${offsetHours >= 0 ? '+' : ''}$offsetHours';

  // 输出结果
  print('城市: $city');
  print('区域/国家: $region');
  print('GMT时区: $gmtString');
}

方案2:使用timezone包获取完整时区数据

集成timezone包(包含标准tz数据库),能更精准地获取时区相关信息:

  1. 先在pubspec.yaml添加依赖:
dependencies:
  timezone: ^0.9.2
  1. 代码实现:
import 'package:flutter_native_timezone/flutter_native_timezone.dart';
import 'package:timezone/timezone.dart' as tz;
import 'package:timezone/data/latest.dart' as tz_data;

Future<void> initTimezoneInfo() async {
  // 初始化时区数据库
  tz_data.initializeTimeZones();
  
  final timezoneId = await FlutterNativeTimezone.getLocalTimezone();
  final location = tz.getLocation(timezoneId);
  
  // 计算GMT偏移
  final offset = location.currentTimeZone.offset;
  final gmtOffset = 'GMT${offset.inHours >= 0 ? '+' : ''}${offset.inHours}';
  
  // 解析城市和区域
  final parts = timezoneId.split('/');
  final region = parts[0];
  final city = parts.length > 1 ? parts[1].replaceAll('_', ' ') : '';

  print('城市: $city');
  print('区域/国家: $region');
  print('GMT时区: $gmtOffset');
}

方案3:自定义时区-国家映射表

如果需要更精准的国家名称(比如将Asia映射为具体国家),可以维护一个自定义映射表:

// 示例映射表,可根据需求扩展
final Map<String, Map<String, String>> timezoneCountryMap = {
  'Asia/Shanghai': {'city': 'Shanghai', 'country': 'China'},
  'Europe/London': {'city': 'London', 'country': 'United Kingdom'},
  'America/New_York': {'city': 'New York', 'country': 'United States'},
};

Future<void> getAccurateTimezoneInfo() async {
  final timezoneId = await FlutterNativeTimezone.getLocalTimezone();
  final info = timezoneCountryMap[timezoneId];
  
  final now = DateTime.now();
  final offsetHours = now.timeZoneOffset.inHours;
  final gmtString = 'GMT${offsetHours >= 0 ? '+' : ''}$offsetHours';

  print('城市: ${info?['city'] ?? 'Unknown'}');
  print('国家: ${info?['country'] ?? 'Unknown'}');
  print('GMT时区: $gmtString');
}

内容的提问来源于stack exchange,提问作者Junaid Aslam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:13:26