Flutter ¿Cómo obtener la red DateTime.Now ()?

Sep 23 2020

En realidad, en flutter DateTime.now()devuelve la fecha y hora del dispositivo. Los usuarios a veces cambian su reloj interno y el uso DateTime.now()puede dar un resultado incorrecto.

  1. ¿Cómo puedo obtener la fecha y hora actual de la red / servidor en flutter?
  2. ¿Es posible obtener la fecha y hora actual de la red / servidor sin usar ningún paquete?

¡Gracias por adelantado!

Respuestas

5 AmonChowdhury Sep 23 2020 at 18:26

No es posible sin una llamada a la API.

Hay un complemento que le permite obtener la hora precisa del Protocolo de tiempo de red (NTP). Implementa todo el protocolo NTP en dart.

Esto es útil para eventos basados ​​en el tiempo ya que DateTime.now () devuelve la hora del dispositivo. Los usuarios a veces cambian su reloj interno y el uso de DateTime.now () puede dar un resultado incorrecto. Puede obtener la compensación del reloj [NTP.getNtpTime] y aplicarla manualmente al objeto DateTime.now () cuando sea necesario (solo agregue la compensación como duración en milisegundos), o puede obtener el objeto [DateTime] ya formateado desde [NTP.now].

Agregue esto al archivo pubspec.yaml de su paquete:

dependencies:
  ntp: ^1.0.7

Luego agregue el código como este:

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