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.

milisegundos TDateTimePicker
Started by
jdepaz
, Apr 22 2013 10:54 AM
4 replies to this topic
#1
Posted 22 April 2013 - 10:54 AM
#3
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,
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,
#4
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.

Saludos.
#5
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!
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!