Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 226
Poder: 0
Galahad Va por buen camino
conversión fecha de tipo instant (java) a date (delphi)

Hola, buenos días.
Estoy descargando de un servicio web un JSON con fechas con este formato:
fechaOperacion":"2024-06-30T22:00:00Z"
el caso es que estaba capturando con funciones de cadena esta fecha y capturandola como 30/06/2024, pero resulta que no,, que la fecha correcta una vez convertida tiene que ser '01/07/2024'

En la documentación de dicho servicio indican que hay que convertirla así.
Código:
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
//Transformamos la cadena obtenida desde el API a un objeto de tipo Instant
Instant instant = Instant.parse('2023-05-09T22:00:00z')
//Si se quiere un dato de tipo Date
Date.from(instant)
//Si se quiere un dato de tipo LocalDateTime
LocalDateTime.ofInstant(instant, ZoneId.of('Europe/Madrid'))
//Si se quiere un dato de tipo LocalDate
instant.atZone(ZoneId.of('Europe/Madrid')).toLocalDate()
He encontrado una manera de poder convertir esa fecha a un tipo de dato datetime de delphi.
he encontrado esta función:

Código Delphi [-]
function JavaToDateTime(Value: Int64): TDateTime;
begin
  Result := UnixToDateTime(Value div 1000);
end;
Mi intención era probarla (no se si funcionará), pero no consigo convertir la cadena : 2024-06-30T22:00:00Z a un valor de tipo Int64 que requiere la función.

¿ Alguien conoce la manera de hacerlo o un camino más directo para dicha conversión ?
Saludos..
Responder Con Cita
  #2  
Antiguo 26-07-2024
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 927
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Estimado Galahad, le sugiero esta función para convertir la fecha que viene en el JSON...

Código Delphi [-]
uses  System.DateUtils;
{$R *.dfm}

function ConvertDateFromStr(SDate:String):TDateTime;
var
  dt: TDateTime;
begin
     if not TryStrToDateTime(SDate, dt) then
        dt := System.DateUtils.ISO8601ToDate(SDate);

     result := DateOf(dt);
end;

procedure TForm1.btnConvertClick(Sender: TObject);
begin
    //Edit1.Text:='2024-06-30T22:00:00Z';

     DateTimePicker1.DateTime :=ConvertDateFromStr(Edit1.Text);

   //El resultado es 30-06-2024...
end;

Saludos cordiales
Responder Con Cita
  #3  
Antiguo 29-07-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 226
Poder: 0
Galahad Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Estimado Galahad, le sugiero esta función para convertir la fecha que viene en el JSON...

Código Delphi [-]
uses  System.DateUtils;
{$R *.dfm}

function ConvertDateFromStr(SDate:String):TDateTime;
var
  dt: TDateTime;
begin
     if not TryStrToDateTime(SDate, dt) then
        dt := System.DateUtils.ISO8601ToDate(SDate);

     result := DateOf(dt);
end;

procedure TForm1.btnConvertClick(Sender: TObject);
begin
    //Edit1.Text:='2024-06-30T22:00:00Z';

     DateTimePicker1.DateTime :=ConvertDateFromStr(Edit1.Text);

   //El resultado es 30-06-2024...
end;

Saludos cordiales
Muchas gracias por contestar.
He probado esa función , con la fecha : 2024-06-30T22:00:00Z , y me devuelve 30/06 no 01/07.
Seguire buscando...
Responder Con Cita
  #4  
Antiguo 29-07-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.180
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué esperas que te devuelva?
Responder Con Cita
  #5  
Antiguo 29-07-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 226
Poder: 0
Galahad Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Y qué esperas que te devuelva?
si, tienes razón, la conversión es correcta (30/06)
habiendo investigado algo mas ,creo que el problema es la petición de datos al json, el problema tiene que estar que al pedir los datos al servicio web desde el '01/07' por algún tema de la configuración horaria UTC me está devolviendo también los del 30/06.
sigo buscando..
Responder Con Cita
  #6  
Antiguo 29-07-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.180
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Supongo que te refieres a que si la hora UTC es, por ejemplo, las 22:00:00 y en tu ubicación local tienes 3 horas más, entonces sería la 01:00:00 del día siguiente.
Así que, también supongo, que si en el json viene la hora "real" UTC, tú tendrás que "convertirla" a tu hora local, y el resultado puede se el del ejemplo que he puesto.
Responder Con Cita
  #7  
Antiguo 29-07-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 226
Poder: 0
Galahad Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Supongo que te refieres a que si la hora UTC es, por ejemplo, las 22:00:00 y en tu ubicación local tienes 3 horas más, entonces sería la 01:00:00 del día siguiente.
Así que, también supongo, que si en el json viene la hora "real" UTC, tú tendrás que "convertirla" a tu hora local, y el resultado puede se el del ejemplo que he puesto.
Hola Casimiro,, efectivamente, ese era el problema...
Al final lo he podido resolver así:

Código Delphi [-]
 
  if not trystrtodatetime( cfecha,dt ) then
      dt := system.dateutils.ISO8601ToDate( cfecha );
   result := TTimeZone.Local.ToLocalTime(dt);

Con esto efectivamente ya aparece la fecha local de esa fecha UTC (01/07)
Muchas gracias por todo,, un abrazo
Responder Con Cita
  #8  
Antiguo 29-07-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.180
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
Respuesta



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
Campo tipo date marcado como NULL retorna una fecha extraña (3/12/1899) pgranados Firebird e Interbase 4 15-02-2023 21:48:23
Campo Fecha de tipo Date se guarda como Blob GUN10 Varios 1 15-03-2016 12:06:45
consulta por fecha (tipo Date) delphi negrokau Varios 8 19-05-2011 18:36:57
asignar fecha a un campo de tipo DATE liito16 OOP 2 09-09-2010 15:48:23
conversion de fecha texto a fecha formato date shinyi OOP 3 17-12-2007 20:19:49


La franja horaria es GMT +2. Ahora son las 23:22:03.


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