Как получить название часового пояса в Flutter?

#flutter #dart

#flutter #dart

Вопрос:

Как получить название текущего часового пояса Asia/Calcutta в Flutter / Dart?

DateTime.now().timeZoneName извлекает строку IST .
DateTime.now().timeZoneOffset извлекает длительность 5:30:00.000000 .

Intl.DateTimeFormat().resolvedOptions().timeZone дает желаемый результат Asia/Calcutta в JavaScript.

Любая помощь приветствуется. Спасибо.

Комментарии:

1. IST — это стандартная аббревиатура для вашего часового пояса, а 05:30 — это смещение для этого часового пояса. Помимо этого, каждый часовой пояс имеет потенциально большое количество разных «имен» для этого часового пояса, и то, которое вы хотите конкретно, может быть несколько произвольным. Например, для вашего конкретного часового пояса, как Dart узнает, хотите ли вы «Азия / Калькутта», «Азия / Коломбо» или «Азия / Калькутта»?

2. @Abion47 Как javascript узнает, хотел ли я «Азия / Калькутта» или «Азия / Коломбо»?

3. Я полагаю, что он либо выбирает произвольно, либо берет данные о вашем местоположении и делает наилучшее предположение. Все, что я могу вам сказать, это найти пакет, который делает что-то подобное , и удачи.

4. @Abion47 Я только что протестировал на родном Android с использованием Java, я смог получить «Азия / Калькутта» с помощью java.util.TimeZone.getDefault().getID() . Я думаю, что это, вероятно, связано с настройками даты и времени системы.

5. Таким образом, это такая же строгая процедура, как если бы это было просто создание Map объекта, который принимает сокращения часовых поясов и произвольно возвращает название локали часового пояса IANA.

Ответ №1:

Ознакомьтесь с пакетом flutter_native_timezone, простым в настройке и использовании.

импортируйте пакет

import 'package:flutter_native_timezone/flutter_native_timezone.dart';

и использовать как

timezone = await FlutterNativeTimezone.getLocalTimezone();

https://pub.dev/packages/flutter_native_timezone/example

Комментарии:

1. хорошая находка. написание пользовательского кода для конкретной платформы хорошо справляется с задачей. для Android и для ios . было бы здорово увидеть, как flutter добавляет атрибут в DateTime.now() , чтобы получить это значение.

Ответ №2:

Я исправил часовой пояс в Flutter таким образом.

 import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
static const platform = const MethodChannel('channel NAME');
Future<void> _configureLocalTimeZone() async {
    tz.initializeTimeZones();
    var locations = tz.timeZoneDatabase.locations;
    final locationName = tz.getLocation(locations.keys.first); //Asia/Calcutta
    tz.setLocalLocation(locationName);
  }
  

Вызов

 await _configureLocalTimeZone();