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"

10-01 21:26