Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con la fecha (https://www.clubdelphi.com/foros/showthread.php?t=94450)

CFPA86 17-02-2020 01:16:09

Problemas con la fecha
 
Hola para tod@s, antes de describirles el problema les pongo en contexto, Desarolle una aplicación bajo D7, dicha aplicación en sus B.D. usa dd/mm/aa para las fechas, la computadora donde se realizo dicha aplicación se formatio e instale el mismo S.O. y el D7, ejecute dicha aplicación, no reconocía las fechas de las B.D., lo solucione con la instrucción SysUtils.ShortDateFormat := "dd/mm/aa" en el create de la forma ppal, ya reconocía la fecha de las B.D. salvo al decodificar la fecha esta la traía en ingles, ahora al programar un nuevo modulo en dicha aplicación preciso de decodificar la fecha, acá viene mi pregunta xq al decodificar la fecha al invocar el día me trae el año y viceversa lo único que me decodifica bien es el mes, espero me de a entender para que me puedan colaborar y disculpen tanto texto para realizarles la pregunta.
Chauuuuu, se cuidan

mamcx 17-02-2020 02:35:24

Estas grabando las fechas como texto (varchar o similar?)?

CFPA86 17-02-2020 17:05:39

Disculpemen la ignorancia pero no se a que se refiere nuestro compañero con varchar o similar, He probado con dos campos en una tabla uno de tipo String (Lo grabo NombreDeCampo.String) y el otro Tipo Date (Lo grabo NombreDeCampo.AsString) y al decodificar ambos me sigue presentando el mismo problema.
Chauuuu, se cuidan.

mamcx 17-02-2020 18:34:07

Ese es tu error. No guardes los datos como string (AsString/String). Asi estas guardando el formato local de la fecha. Usa el campo Date y usa la propiedad date adecuada.

Solamente se formatea para MOSTRAR al usuario, nunca para manipular internamente las fechas (o numeros, valores de moneda, etc).

TiammatMX 19-02-2020 03:49:58

Siempre puedes guardar la fecha como un 'double'..., aunque su manejo es más complicado, suele ser más efectivo a la hora de comparar fechas.

mamcx 19-02-2020 04:25:33

No, guarda fechas como fechas.

Lo digo jodidamente en serio. Mi trabajo es integrar un monton de apps y BD. De donde sacan los programadores esas ideas raras que las fechas hay que guardarlas de otra manera(?) es uno de mis mas grandes dolores de cabeza, despues de los que se les ocurre guardar valores monetarios como flotantes binarios, o peor, como texto con símbolos de moneda ( y eso, resumiendo. He visto de todo!).

Usar el tipo correcto es de los mas importante y elemental en la programación. Y de mas, cuando sale GRATIS porque el motor/lenguaje ya lo tiene.

Al 1.000 millones por ciento si se escoje a drede un tipo incorrecto el programa ES incorrecto.

TiammatMX 19-02-2020 04:34:35

Cita:

Empezado por mamcx (Mensaje 535778)
...Al 1.000 millones por ciento si se escoje a drede un tipo incorrecto el programa ES incorrecto...

De acuerdo contigo. Pero también una solución alterna que funcione (a mí me funciona de maravilla hacer las comparaciones de fechas como double) puede resolver un problema que parece o es insoluble. Abrirse a nuevas ideas no duele...

mamcx 19-02-2020 06:01:04

Cita:

Empezado por TiammatMX (Mensaje 535779)
puede resolver un problema que parece o es insoluble. Abrirse a nuevas ideas no duele...

Y que problema es ese? Acaso no puedes comparar fechas?

kuan-yiu 19-02-2020 12:21:59

Cita:

Empezado por TiammatMX (Mensaje 535779)
De acuerdo contigo. Pero también una solución alterna que funcione (a mí me funciona de maravilla hacer las comparaciones de fechas como double) puede resolver un problema que parece o es insoluble. Abrirse a nuevas ideas no duele...

Los TDateTime internamente son Double. Muchas de las operaciones con fechas se pueden trasladar a operaciones matemáticas simples... Siempre que no se olvide que son una representación de días.

A la hora de almacenar yo también soy tajante: cada tipo para lo que es.
Código Delphi [-]
MiTabla.Fieldbyname('nombre').AsString
MiTabla.Fieldbyname('fecha').AsDateTime

Casimiro Notevi 19-02-2020 13:39:07

Cita:

Empezado por kuan-yiu (Mensaje 535785)
Los TDateTime internamente son Double. Muchas de las operaciones con fechas se pueden trasladar a operaciones matemáticas simples... Siempre que no se olvide que son una representación de días.

A la hora de almacenar yo también soy tajante: cada tipo para lo que es.
Código Delphi [-]MiTabla.Fieldbyname('nombre').AsString MiTabla.Fieldbyname('fecha').AsDateTime

^\||/^\||/^\||/

mamcx 19-02-2020 16:24:44

Para aclarar cosas, teniendo en cuenta que conceptos como "fecha", "moneda", "texto" son abstracciones que eventualmente se pueden representar en tipos "primarios" como doubles, ints, bits, etc. Porque es MUY importante ceñirse a la regla de usar el tipo mas exacto posible en vez de "optimizarlo" o lo que sea que pase como razon en nuestra mente?

Porque son JODIDAMENTE COMPLEJOS.

Yo me le meto mas a hacer un ERP que una librería de fechas.

No miren sin mas:

https://infiniteundo.com/post/253269...eve-about-time

Cita:

Mentiras que creen los programadores acerca del tiempo:
  1. There are always 24 hours in a day.
  2. Months have either 30 or 31 days.
  3. Years have 365 days.
  4. February is always 28 days long.
....
y estas para arrancar!. Y con respecto a lo demás:

https://github.com/kdeldycke/awesome-falsehood

CFPA86 20-02-2020 21:54:05

Tengo com lema no llevarle la contraria a los que saben mas que uno, asi considero a la gran mayoria de los de este foro, en cuanto a nuestro lenguaje DELPHI, solamente me queda por agradecerles a todos, todos los campos que tenia como String los baje a TDateTime y me funciona perfecto.
Chauuu se cuidan.


La franja horaria es GMT +2. Ahora son las 20:33:06.

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