Jump to content


Photo

milisegundos TDateTimePicker


  • Please log in to reply
4 replies to this topic

#1 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 posts
  • LocationMedellín Colombia

Posted 22 April 2013 - 10:54 AM

Saludos a todos,

Tengo un componente TDateTimePicker, de donde el usuario selecciona la fecha, y con esta fecha necesito obtener los milisegundos transcurridos desde 1970 hasta esta fecha.

¿Alguno me puede dar una pista?

Ya que estoy buscando en los métodos pero no encuentro alguno para obtener esta información.


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 22 April 2013 - 10:58 AM

Aquí un ejemplo Zarko Gajic.

Saludos.
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6301 posts
  • LocationArgentina

Posted 22 April 2013 - 11:47 AM

Hola,
No es por desmerecer al artículo de Zarko, pero si en verdad se requiere llevar una alta precisión de cálculo hasta en los milisegundos me parece que lo más sano es directamente optar por un tipo de dato ya especifícamente diseñado para ello: TTimeStamp.

Justamente el "truco" de Zarko se vale de la conversión de TDateTime a TTimeStamp. Por lo que en realidad se está añadiendo intermediación. En su lugar pregunto ¿Y porqué no entonces nos evitamos al intermediario y cortamos por hacerlo directo?
Si... lo se... con TTimeStamp es un tanto más engorroso de trabajar que con TDateTime.

Saludos,
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 22 April 2013 - 12:12 PM

Pues es que la info lo saca desde un TDateTimePicker que devuelve un valor del tipo TDateTime, así que de todos modos deberá hacer la conversión :).

Saludos.
  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 23 April 2013 - 03:06 AM

¿Desde qué milisegundo exactamente de 1970?

Tanta precisión la veo una exageración cuando se cuenta desde un AÑO hasta una hora introducida en segundos, piensa que desde 1970 han pasado más de 1.300.000.000.000 milisegundos.

Yo guardaría el datetime introducido sin más, porque los días desde 1970 + segundos del día en cuestión los tienes dentro de un datetime, y los milisegundos adicionales son falsos, inventados, sobran!

Años transcurridos: trunc(MyDateTime)+71 (el date time guarda años, con 0 correspondiendo a 1899, 1 a 1900, etc)
Parte del día final transcurrido: MyDateTime-Trunc(MyDateTime);

Es decir, que MyDateTime+71 te da en formato double lo que pides, eso si, con precisión de segundos, y si realmente necesitas ponerlos como milisegundos, pues:

Milisegundos_desde_1970:= (DaysBetween('01/01/1970', MyDateTime) + (MyDateTime-Trunc(MyDateTime))*24*60*60*1000;

Nota: La fecha de 1970 tendrías que convertirla a Datetime, claro, aquí pongo un string por comodidad mia!

  • 0




IP.Board spam blocked by CleanTalk.