Flutter Jak uzyskać sieć DateTime.Now ()?

Sep 23 2020

Właściwie we flutter DateTime.now()zwraca datę i godzinę urządzenia. Użytkownicy czasami zmieniają swój wewnętrzny zegar i użycie DateTime.now()może dać zły wynik.

  1. Jak mogę uzyskać bieżącą datę i godzinę sieci / serwera we flutter?
  2. Czy można uzyskać bieżącą datę i godzinę sieci / serwera bez używania jakichkolwiek pakietów?

Z góry dziękuję!

Odpowiedzi

5 AmonChowdhury Sep 23 2020 at 18:26

Nie jest to możliwe bez wywołania interfejsu API.

Istnieje wtyczka, która pozwala uzyskać dokładny czas z protokołu Network Time Protocol (NTP). Implementuje cały protokół NTP w dart.

Jest to przydatne w przypadku zdarzeń opartych na czasie, ponieważ DateTime.now () zwraca czas urządzenia. Użytkownicy czasami zmieniają swój wewnętrzny zegar i użycie DateTime.now () może dać zły wynik. Możesz po prostu uzyskać przesunięcie zegara [NTP.getNtpTime] i zastosować je ręcznie do obiektu DateTime.now () w razie potrzeby (po prostu dodaj przesunięcie jako czas trwania milisekund) lub możesz pobrać już sformatowany obiekt [DateTime] z [NTP.now].

Dodaj to do pliku pubspec.yaml swojego pakietu:

dependencies:
  ntp: ^1.0.7

Następnie dodaj kod w ten sposób:

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');
}