一尘不染

在Dart / Flutter中创建DateTime对象时如何指定TimeZone?

flutter

Dart?flutter似乎不允许在创建DateTime对象时指定时区(例如:“澳大利亚/悉尼”或“美国/底特律”)。可以使用本地时区,也可以指定UT。

有人知道解决方法吗?

有Dart包TimeZone,但在flutter应用程序中似乎无法使用。

请参阅https://pub.dartlang.org/packages/timezone以获取我要引用的软件包。

编辑:时区包确实在Flutter中工作,并进行了一些设置。请参阅下面的Richard Heap的答案。


阅读 955

收藏
2020-08-13

共1个答案

一尘不染

您需要做一些魔术才能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"
2020-08-13