How to specify a TimeZone when creating a DateTime object in Dart/Flutter?

前端 未结 2 704
广开言路
广开言路 2021-01-12 03:11

Dart?flutter does not appear to allow a timezone (eg: \"Australia/Sydney\" or \"America/Detroit\") to be specified when creating a DateTime object. Either the local timezone

2条回答
  •  自闭症患者
    2021-01-12 03:38

    You have to do a bit of magic to get package:timezone to work in flutter.

    Extract whichever data file you need (there are 3: default, all and 2010-2020) and move it to your flutter assets folder. (I use 2018c_2010-2020.tzf, which is available in a branch.)

    Add it as an asset in pubspec.yaml:

      assets:
        - assets/2018c_2010-2020.tzf
    

    Then load that file on startup (e.g. from the initState of a top level StatefulWidget) and use it to initialise the database.

    ByteData tzf = await rootBundle.load('assets/2018c_2010-2020.tzf');
    initializeDatabase(tzf.buffer.asUint8List());
    ...
    Location newYork = getLocation('US/Eastern');
    

    I haven't tried, but you may even be able to load it from main if you mark it async.

    I also notice that I must have cloned the latest branch, as I see this in my pubspec

      timezone:
        path: ../../dart/source/timezone
    

    ... but looks like you just need to grab 0.5.0-dev-2 from pub

    dependencies:
      timezone: "^0.5.0-dev-2"
    

提交回复
热议问题