Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-11-2024
novatico novatico is offline
Miembro
 
Registrado: dic 2022
Posts: 373
Poder: 4
novatico Va por buen camino
Cita:
Empezado por AlfredoSanz Ver Mensaje
Holaqtal.

Yo me inclino por verificar la fecha del sistema mediante un webservice antes de hacer el envío, de esta forma nos aseguramos de que "mi vecino Jose" no ha tocado nada.

He estado probando worldtimeapi.org, pero muchas veces no me responde.

¿Alguien sabe de algún servicio similar?

Prueba http://date.jsontest.com, es más sencillo pero puede servir.
El servicio de worldtimeapi.org empezó a tener fallos/esperas aleatorias desde que, creo que en Septiembre, se produjo aquella caída masiva de Microsoft. Desde entonces, algunos días funciona perfectamente, y otros se producen esperas muy largas. En mi caso, esto lo he detectado principalmente por las tardes.
Responder Con Cita
  #2  
Antiguo 04-11-2024
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 334
Poder: 6
edari Va por buen camino
Cita:
Empezado por novatico Ver Mensaje
Prueba http://date.jsontest.com, es más sencillo pero puede servir.
El servicio de worldtimeapi.org empezó a tener fallos/esperas aleatorias desde que, creo que en Septiembre, se produjo aquella caída masiva de Microsoft. Desde entonces, algunos días funciona perfectamente, y otros se producen esperas muy largas. En mi caso, esto lo he detectado principalmente por las tardes.
A mí me funciona a veces mal worldtimeapi... habrá que empezar a descartarlo
Pruebo este a ver pero me da hora inglesa...habrá que pasar algún parámetro?
Conocéis algún otro que informe también de la zona horaria?

Gracias

Última edición por Neftali [Germán.Estévez] fecha: 05-11-2024 a las 08:59:21.
Responder Con Cita
  #3  
Antiguo 05-11-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Cita:
Empezado por novatico Ver Mensaje
Prueba http://date.jsontest.com, es más sencillo pero puede servir.
El servicio de worldtimeapi.org empezó a tener fallos/esperas aleatorias desde que, creo que en Septiembre, se produjo aquella caída masiva de Microsoft. Desde entonces, algunos días funciona perfectamente, y otros se producen esperas muy largas. En mi caso, esto lo he detectado principalmente por las tardes.
Hola
Estoy probando el servicio. Sabía si siempre devuelve 1 hora menos, o cambia en verano?
Gracias
Responder Con Cita
  #4  
Antiguo 05-11-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 565
Poder: 6
rci Va por buen camino
Yo trabajo en c#.net y utilizo servidores ntp (Network Time Protocol) para consultar la hora en internet, ahora mismo uso time.windows.com pero creo que hay muchos mas servidores de este tipo.
Devuelve la fecha y hora UTC y luego la convierto en la hora local
No se si serviría para delphi
Responder Con Cita
  #5  
Antiguo 05-11-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 864
Poder: 3
bmfranky Va por buen camino
Cita:
Empezado por rci Ver Mensaje
Yo trabajo en c#.net y utilizo servidores ntp (Network Time Protocol) para consultar la hora en internet, ahora mismo uso time.windows.com pero creo que hay muchos mas servidores de este tipo.
Devuelve la fecha y hora UTC y luego la convierto en la hora local
No se si serviría para delphi
Hola, puedes pasar el codigo que usas para la consulta?
Yo uso esta Que devuelbe un json con todos los datos incluyendo el desfase UTC, basado en la ip, mirad el ejemplo.

Cita:
utc_offset"+01:00"timezone"Europe/Madrid"day_of_week2day_of_year310datetime"2024-11-05T09:13:09.623438+01:00"utc_datetime"2024-11-05T08:13:09.623438+00:00"unixtime1730794389raw_offset3600week_number45dstfalseabbreviation"CET"dst_o ffset0dst_fromnulldst_untilnullclient_ip"79.108.205.131"
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
  #6  
Antiguo 05-11-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 565
Poder: 6
rci Va por buen camino
Cita:
Empezado por bmfranky Ver Mensaje
Hola, puedes pasar el codigo que usas para la consulta?
Yo uso esta
Que devuelbe un json con todos los datos incluyendo el desfase UTC, basado en la ip, mirad el ejemplo.

Lo saqué de internet: https://stackoverflow.com/questions/...server-using-c

Es posible que se pueda mejorar pero de momento uso este:

Código:
       private static DateTime GetNetworkTime()
       {
           //default Windows time server
           const string ntpServer = "time.windows.com";

           // NTP message size - 16 bytes of the digest (RFC 2030)
           var ntpData = new byte[48];

           //Setting the Leap Indicator, Version Number and Mode values
           ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)

           var addresses = Dns.GetHostEntry(ntpServer).AddressList;

           //The UDP port number assigned to NTP is 123
           var ipEndPoint = new IPEndPoint(addresses[0], 123);
           //NTP uses UDP

           using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
           {
               socket.Connect(ipEndPoint);

               //Stops code hang if NTP is blocked
               socket.ReceiveTimeout = 3000;

               socket.Send(ntpData);
               socket.Receive(ntpData);
               socket.Close();
           }

           //Offset to get to the "Transmit Timestamp" field (time at which the reply 
           //departed the server for the client, in 64-bit timestamp format."
           const byte serverReplyTime = 40;

           //Get the seconds part
           ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);

           //Get the seconds fraction
           ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);

           //Convert From big-endian to little-endian
           intPart = SwapEndianness(intPart);
           fractPart = SwapEndianness(fractPart);

           var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);

           //**UTC** time
           var networkDateTime = (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);

           return networkDateTime.ToLocalTime();
       }

       // stackoverflow.com/a/3294698/162671
       private static uint SwapEndianness(ulong x)
       {
           return (uint)(((x & 0x000000ff) << 24) +
                          ((x & 0x0000ff00) << 8) +
                          ((x & 0x00ff0000) >> 8) +
                          ((x & 0xff000000) >> 24));
       }
Responder Con Cita
  #7  
Antiguo 05-11-2024
mqm mqm is offline
Miembro
 
Registrado: nov 2006
Posts: 63
Poder: 20
mqm Va por buen camino
Aqui teneis en codigo en delphi 11.

Código Delphi [-]
unit VerificaFecha;
interface

uses
  IdUDPClient, IdGlobal, SysUtils, DateUtils;

function GetNetworkTime: TDateTime;

implementation

function SwapEndianness(Value: UInt32): UInt32;
begin
  Result := ((Value and $000000FF) shl 24) or
            ((Value and $0000FF00) shl 8) or
            ((Value and $00FF0000) shr 8) or
            ((Value and $FF000000) shr 24);
end;

function GetNetworkTime: TDateTime;
const
  NTP_SERVER = 'time.windows.com';
  NTP_PORT = 123;
  NTP_PACKET_SIZE = 48;
  NTP_TIMESTAMP_OFFSET = 2208988800; // Seconds between 1900 and 1970
  SERVER_REPLY_TIME = 40; // Offset to "Transmit Timestamp"
var
  UDPClient: TIdUDPClient;
  NTPData: TIdBytes;
  Seconds, Fraction: UInt32;
  UnixTime: UInt64;
begin
  UDPClient := TIdUDPClient.Create(nil);
  try
    UDPClient.Host := NTP_SERVER;
    UDPClient.Port := NTP_PORT;
    UDPClient.BufferSize := NTP_PACKET_SIZE;

    SetLength(NTPData, NTP_PACKET_SIZE);
    FillChar(NTPData[0], NTP_PACKET_SIZE, 0);

    // Set LI, VN, Mode
    NTPData[0] := $1B;

    // Send request
    UDPClient.Connect;
    UDPClient.SendBuffer(NTPData);

    // Receive response
    UDPClient.ReceiveTimeout := 3000;
    UDPClient.ReceiveBuffer(NTPData);

    // Extract timestamp
    Seconds := SwapEndianness(PCardinal(@NTPData[SERVER_REPLY_TIME])^);
    Fraction := SwapEndianness(PCardinal(@NTPData[SERVER_REPLY_TIME + 4])^);

    UnixTime := Seconds - NTP_TIMESTAMP_OFFSET;
    Result := UnixDateDelta + UnixTime / SecsPerDay;
    Result := Result + (Fraction / High(UInt32) / SecsPerDay);

    // Convert to local time
    Result := TTimeZone.Local.ToLocalTime(Result);
  finally
    UDPClient.Free;
  end;
end;

end.

Y ejemplo de llamada :
procedure TForm3.Button1Click(Sender: TObject);
var
  NetworkTime: TDateTime;
begin
  try
    NetworkTime := GetNetworkTime;
    ShowMessage('La hora de red es: ' + DateTimeToStr(NetworkTime));
  except
    on E: Exception do
      ShowMessage('Error al obtener la hora de red: ' + E.Message);
  end;
end;

Última edición por Neftali [Germán.Estévez] fecha: 05-11-2024 a las 12:13:46. Razón: Añadir TAG's al código
Responder Con Cita
  #8  
Antiguo 05-11-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.455
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por mqm Ver Mensaje
Aqui teneis en codigo en delphi 11.

Por favor, añadid TAG's cuando pongáis código en los mensajes.
Para los nuevos en los foros, la recomendación es leer la Guía de estilo de los foros.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 09-01-2025
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 334
Poder: 6
edari Va por buen camino
Cita:
Empezado por novatico Ver Mensaje
Prueba http://date.jsontest.com, es más sencillo pero puede servir.
El servicio de worldtimeapi.org empezó a tener fallos/esperas aleatorias desde que, creo que en Septiembre, se produjo aquella caída masiva de Microsoft. Desde entonces, algunos días funciona perfectamente, y otros se producen esperas muy largas. En mi caso, esto lo he detectado principalmente por las tardes.

Os dejó de funcionar?


Porque yo he estado unas semanas con otros proyectos y ahora al volver a Verifactu veo que me da error la consulta a esta web...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como le resto una hora a la fecha y hora en sql server uper MS SQL Server 3 12-10-2015 20:41:49
Agrupar por fecha, teniendo en el campo fecha y hora El_Raso Firebird e Interbase 3 18-03-2010 22:05:19
obtener solo la fecha en formato fecha y sin hora BlueSteel SQL 14 09-05-2008 16:42:19
formato fecha y hora a solo Fecha ozegarra Firebird e Interbase 6 22-02-2008 18:43:34
Extraccion fecha de un campo fecha y hora matti Firebird e Interbase 3 26-04-2007 19:48:11


La franja horaria es GMT +2. Ahora son las 21:04:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi