在Dart / Flutter中创建DateTime对象时如何指定TimeZone?
问题内容:
Dart?flutter似乎不允许在创建DateTime对象时指定时区(例如:“澳大利亚/悉尼”或“美国/底特律”)。可以使用本地时区,也可以指定UT。
有人知道解决方法吗?
有Dart包TimeZone,但在flutter应用程序中似乎无法使用。
请参阅https://pub.dartlang.org/packages/timezone以获取我要引用的软件包。
编辑:时区包确实在Flutter中工作,并进行了一些设置。请参阅下面的Richard Heap的答案。
问题答案:
您需要做一些魔术才能package:timezone
扑朔迷离。
提取所需的任何数据文件(共有3个:默认,全部和2010-2020年),然后将其移至flutter资产文件夹中。(我使用2018c_2010-2020.tzf
,可以在分支中使用。)
将其添加为资产pubspec.yaml
:
assets:
- assets/2018c_2010-2020.tzf
然后在启动时加载该文件(例如,从initState
顶级StatefulWidget的文件中加载)并使用它来初始化数据库。
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"