[ Andreja Dulovic @ 27.05.2007. 22:42 ] @
problem:
imam dva "timestampa", i treba mi interval vremena izmedju njih.
vremena su u string formatu. prebacim ih u instance Date klase, zatim svako od ta dva vremena predstavim kao Long broj (broj milisekundi od 01/01/1970) i oduzmem manji od veceg. tako dobijen long (razliku dva vremena) zelim da predstavim kao novu instancu Date-a. medjutim, ne dobijam validan rezultat.

Code:
        String d1 = "05/23/2007 13:01:06.616";
        String d2 = "05/23/2007 13:05:21.837";
        String dateFormat1 = "MM/dd/yyyy HH:mm:ss.SSS";
        String dateFormat2 = "HH:mm:ss.SSS";
        
        SimpleDateFormat df = new SimpleDateFormat(dateFormat1);

        try {
            Date date1 = df.parse(d1);
            Date date2 = df.parse(d2);

            pt("date1: "+df.format(date1)+" (long: "+date1.getTime()+")");
            pt("date2: "+df.format(date2)+" (long: "+date1.getTime()+")");
            
            long dd = date2.getTime() - date1.getTime();
            
            Date date3 = new Date(dd);
            df = new SimpleDateFormat(dateFormat2);
            pt("date3: "+df.format(date3)+" (long: "+date3.getTime()+")");
            
            
        } catch (ParseException exc) {
            // TODO Auto-generated catch block
            exc.printStackTrace();
        }


kao rezultat izvrsavanja ovog koda dobija se:

Code:
date1: 05/23/2007 13:01:06.616 (long: 1179918066616)
date2: 05/23/2007 13:05:21.837 (long: 1179918066616)
date3: 01:04:15.221 (long: 255221)



dakle, razlika ova dva vremena bi trebalo da bude: 00:04:15.221 a ne: 01:04:15.221 kao sto je ispisano.

odakle se stvorio ovaj jedan sat viska?
[ tiranin @ 28.05.2007. 08:25 ] @
Mozda kroz letnje racunanje vremena jer 1970 nije postojalo letnje i zimsko vreme :)

BTW. nisi dobro ispisao one dve long vrednosti
[ hyle @ 28.05.2007. 08:25 ] @
Vreme izraženo kao long je apsolutno vreme i predstavlja broj milisekundi od 1. januara 1970. UTC. UTC (coordinated universal time) odgovara vremenskoj zoni Griniča i razlika u odnosu na našu vremensku zonu je 1 sat.

Računica kojom dobijaš razliku između dva datuma je tačna, greška nastaje u trenutku kada prikazuješ dobijenu razliku jer ti se rezultat prikazuje u našoj vremenskoj zoni koja dodaje 1 sat.

Ozbiljnije baratanje vremenom i datumima u Javi zna da bude baš nezgodno. Opšta preporuka za manipulaciju vremenom je "Joda Time" biblioteka koja između ostalog ima i ovo što tebi treba, operacija sa vremenskim intervalima.
http://joda-time.sourceforge.net/
[ Andreja Dulovic @ 28.05.2007. 11:15 ] @
Citat:
tiranin: BTW. nisi dobro ispisao one dve long vrednosti

u pravu si. pogresno sam paste-ovao u poruku.



Citat:
hyle: Računica kojom dobijaš razliku između dva datuma je tačna, greška nastaje u trenutku kada prikazuješ dobijenu razliku jer ti se rezultat prikazuje u našoj vremenskoj zoni koja dodaje 1 sat.

hvala na pomoci - to je to!

inace, sad sam bacio pogled na joda time i deluje mi odlicno.