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