Flutter Как получить сеть DateTime.Now ()?

Sep 23 2020

Фактически во флаттере DateTime.now()возвращается дата и время устройства. Пользователи иногда меняют свои внутренние часы, и их использование DateTime.now()может дать неверный результат.

  1. Как я могу получить текущую дату и время сети / сервера во флаттере?
  2. Можно ли получить текущую дату и время сети / сервера без использования каких-либо пакетов?

Заранее спасибо!

Ответы

5 AmonChowdhury Sep 23 2020 at 18:26

Это невозможно без вызова API.

Есть плагин, который позволяет вам получать точное время по протоколу сетевого времени (NTP). Он реализует весь протокол NTP в dart.

Это полезно для событий, основанных на времени, поскольку DateTime.now () возвращает время устройства. Пользователи иногда меняют свои внутренние часы, и использование DateTime.now () может дать неверный результат. Вы можете просто получить смещение часов [NTP.getNtpTime] и применить его вручную к объекту DateTime.now (), когда это необходимо (просто добавьте смещение как продолжительность в миллисекундах), или вы можете получить уже отформатированный объект [DateTime] из [NTP.now].

Добавьте это в файл pubspec.yaml вашего пакета:

dependencies:
  ntp: ^1.0.7

Затем добавьте такой код:

import 'package:ntp/ntp.dart';

Future<void> main() async {
  DateTime _myTime;
  DateTime _ntpTime;

  /// Or you could get NTP current (It will call DateTime.now() and add NTP offset to it)
  _myTime = await NTP.now();

  /// Or get NTP offset (in milliseconds) and add it yourself
  final int offset = await NTP.getNtpOffset(localTime: DateTime.now());
  _ntpTime = _myTime.add(Duration(milliseconds: offset));

  print('My time: $_myTime'); print('NTP time: $_ntpTime');
  print('Difference: ${_myTime.difference(_ntpTime).inMilliseconds}ms');
}