Dart?flutter似乎不允许在创建DateTime对象时指定时区(例如:“澳大利亚/悉尼”或“美国/底特律”)。可以使用本地时区,也可以指定UT。
有人知道解决方法吗?
有Dart软件包TimeZone,但在flutter应用程序中似乎无法使用。
请参阅https://pub.dartlang.org/packages/timezone以获取我要引用的软件包。
编辑:时区包确实在Flutter中工作,并进行了一些设置。请参阅下面的Richard Heap的答案。
最佳答案
您需要做一些魔术才能使package:timezone
发挥作用。
提取所需的任何数据文件(共有3个:默认,全部和2010-2020年),然后将其移至flutter Assets 文件夹中。 (我使用2018c_2010-2020.tzf
,它在分支中可用。)
将其添加为pubspec.yaml
中的 Assets :
assets:
- assets/2018c_2010-2020.tzf
然后在启动时加载该文件(例如,从顶级StatefulWidget的
initState
中加载)并使用它来初始化数据库。ByteData tzf = await rootBundle.load('assets/2018c_2010-2020.tzf');
initializeDatabase(tzf.buffer.asUint8List());
...
Location newYork = getLocation('US/Eastern');
我没有尝试过,但是如果您将其标记为异步的话,您甚至可以从
main
加载它。我还注意到我必须克隆了最新的分支,因为我在pubspec中看到了这一点。
timezone:
path: ../../dart/source/timezone
...但是看起来您只需要从pub获取0.5.0-dev-2
dependencies:
timezone: "^0.5.0-dev-2"