#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();
Комментарии:
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();