[eside-ghost] Fecha Lifeblog
Iker Perez de Albeniz - Txupete -
txupete en gmail.com
Lun Dic 20 09:46:48 CET 2010
Por cierto.. me ha parecido ver que usas java.. creo que java soporta
fechas en 64 bits.. directamente.. mira el cliente de
andorid-market-api que esta hecho en java...
http://code.google.com/p/android-market-api/source/browse/#svn%2Ftrunk%2FAndroidMarketApi%2Fproto%253Fstate%253Dclosed
El día 20 de diciembre de 2010 09:43, Iker Perez de Albeniz - Txupete
- <txupete en gmail.com> escribió:
> Hola,
>
> En su día estube haciendo ingeniería inversa del protocolo de Google
> Market.. y tenia un problema parecido con las fechas.. por ahí leí que
> estaban en formato uint64 en vez de uint32 para evitar
> http://en.wikipedia.org/wiki/Year_2038_problem
>
> por ahi vi algunos algoritmos que cogían los primeros 32 bits para
> fecha y una combinación de estos con los segundos 32 bits para
> tiempo... no recuerdo mas..
>
> mira esto a ver si te sirve...
>
> http://www.magick-source.net/projects/magick-source/wiki/NTP64bits2UnixTime
>
>
> El día 19 de diciembre de 2010 00:18, Álvaro Morán
> <nirvana644 en gmail.com> escribió:
>> Hola,
>> Quería convertir fechas de la aplicación Nokia Lifeblog desde el formato en
>> que estas se guardan en la base de datos de sqlite
>> (NokiaLifeblogDataBase.db3) a un formato más fácil de entender.
>> Las fechas se guardan con un formato como este 39478.764525463 (que equivale
>> al 31/1/2008 18:20:55) donde la parte entera guarda el día, mes y año y la
>> parte decimal la hora, minutos y segundos.
>> He averiguado que para convertir la parte entera basta con hacer
>> public static int INICIO = 39447;
>> public static int[] convertirFloatFechaAEnteros(double fecha) throws
>> Exception
>> {
>> // Este número 39467 se corresponde al día 18 de enero de 2008
>> // por tanto 0 de enero de 2008 <--> 39447, que es un valor ficticio de
>> referencia (no existe el día 0)
>> int numAAnalizar = (int) fecha;
>> if(numAAnalizar<=INICIO)
>> throw new Exception("Sólo se permiten fechas superiores o iguales al 1 de
>> enero de 2008, que se corresponden con la parte entera "+(INICIO+1)+".");
>> int año=2008, mes = 1;// dia = 0;
>> int numDias = numAAnalizar - INICIO;
>> if(numDias > 366)
>> {
>> numDias -= 366;
>> año ++;
>> }
>> while(numDias > diasMeses[mes -1] )
>> {
>> if(mes != 2) {
>> numDias -= diasMeses[mes -1];
>> mes ++;
>> }
>> else
>> {
>> if(esBisiesto(año)) {
>> if(numDias > 29)
>> {
>> numDias -= 29;
>> mes ++;
>> }
>> }
>> else {
>> if(numDias > 28)
>> {
>> numDias -= 28;
>> mes ++;
>> }
>> }
>> }
>> }
>> //System.out.println("Número analizado: "+numAAnalizar+" Fecha =
>> "+numDias+"-"+mes+"-"+año);
>> return new int[] {numDias, mes, año};
>> }
>>
>> Sin embargo por mucho que he googleado no tengo la más remota idea de cómo
>> convertir la parte decimal a su correspondiente hora, minutos y segundos. ¿A
>> alguien se le ocurre algo?.
>> Adjunto un fichero en java que funciona (la parte que ya comenté).
>> Atentamente Álvaro
>> _______________________________________________
>> eside-ghost mailing list
>> eside-ghost en listas.deusto.es
>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>>
>
>
>
> --
> Iker Perez de Albeniz
> web: http://www.ikeralbeniz.net/
>
--
Iker Perez de Albeniz
web: http://www.ikeralbeniz.net/
Más información sobre la lista de distribución eside-ghost