如何在Flutter中获取时区名称?

5
如何在Flutter/Dart中获取当前时区名称Asia/Calcutta

DateTime.now().timeZoneName返回字符串IST
DateTime.now().timeZoneOffset返回持续时间5:30:00.000000

Intl.DateTimeFormat().resolvedOptions().timeZone可以在JavaScript中提供所需的结果,Asia/Calcutta

如果需要帮助,请随时联系。谢谢。


IST是您所在时区的标准缩写,+05:30是该时区的偏移量。除此之外,每个时区可能有大量不同的“名称”,您想要具体哪一个可能有些随意。例如,对于您所在的特定时区,Dart如何知道您想要“亚洲/加尔各答”、“亚洲/科伦坡”还是“亚洲/加尔各答”? - Abion47
1
@Abion47 JavaScript如何知道我想要“Asia/Calcutta”还是“Asia/Colombo”? - ippi
我猜测它要么是随机选择,要么就是利用你的位置数据做出最佳猜测。我能告诉你的就是去找一个类似的包,祝你好运。 - Abion47
@Abion47 我刚在本地使用Java测试了一下Android,我能够使用java.util.TimeZone.getDefault().getID()获取“Asia/Kolkata”。我认为这可能与系统的日期时间设置有关。 - kartoon
因此,这就像制作一个Map对象一样严格的过程,该对象需要时区缩写并任意返回IANA时区语言环境名称。 - Abion47
2个回答

7

1
不错的发现。编写自定义平台特定代码可以很好地完成工作。适用于AndroidiOS。 如果能在DateTime.now()中添加一个属性来获取这个值,那就太棒了。 - kartoon

0
我用以下方法在Flutter中解决了时区问题。
import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
static const platform = const MethodChannel('channel NAME');
Future<void> _configureLocalTimeZone() async {
    tz.initializeTimeZones();
    var locations = tz.timeZoneDatabase.locations;
    final locationName = tz.getLocation(locations.keys.first); //Asia/Calcutta
    tz.setLocalLocation(locationName);
  }

呼叫
await _configureLocalTimeZone();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接