Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Quindi dovrei creare la data odierna con ore minuti e secondi impostati a 0 e sommargli i millisecondi dell'oggetto java.sql.time?
no ma c'è qualcosa che non mi torna , anche il metodo get time fa riferimento alla zeroepoch!
Ultima modifica di linux_r; 11-04-2014 a 12:57
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ma se uso il metodo getTime , di java.sql.Time , dice che fa sempre riferimento alla zero epoch, inoltre quando creo un nuovo oggetto Date, esso utilizza data e ora correnti , quindi non 00:00:00. grazie dell'aiuto naturalmente
Con il long dei millisecondi è vero che 0 è tecnicamente 1 gennaio 1970 0:00:00 (GMT) ma in questo caso, con java.sql.Time, non importa .... sono millisecondi "in un qualunque giorno", in pratica ignorando il giorno. Stop. Questo serve.
Io non ho detto di partire con un new Date() .... ho detto di partire da un Date che "rappresenta gg/mm/aaaa 00:00:00" e questo ad esempio lo ottieni partendo da un GregorianCalendar, poi prendendo o il Date o direttamente i millisecondi.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ah ok !! ti ringrazio tantissimo !!
Questo è il codice, funziona tutto solo che l'appuntamento risulta un ora in meno, ad esempio se è alle 10:30, risulta alle 9:30. Ho visualizzato anche l'oggetto time, l'ho stampato e stampa le 10:30.
codice:TaskAppuntamento task=new TaskAppuntamento(cliente); Calendar calendario=Calendar.getInstance(Locale.ITALY); calendario.set(Calendar.HOUR, 0); calendario.set(Calendar.MINUTE, 0); calendario.set(Calendar.SECOND, 0); java.util.Date data=new java.util.Date(calendario.getTimeInMillis()+ appuntamento.getTime()); this.scheduler.schedule(task, data); System.out.println(calendario.toString()); System.out.println(appuntamento.toString()); System.out.println(data.toString());
Ecco gli output
codice:java.util.GregorianCalendar[time=1397685600795,areFieldsSet=true,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2014,MONTH=3,WEEK_OF_YEAR=16,WEEK_OF_MONTH=3,DAY_OF_MONTH=17,DAY_OF_YEAR=107,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=795,ZONE_OFFSET=3600000,DST_OFFSET=3600000] 10:30:00 Thu Apr 17 09:30:00 CEST 2014
Ultima modifica di LeleFT; 17-04-2014 a 12:41
Già, vero ... ma è perchè nell'oggetto Time i millisecondi sono nel fuso orario GMT (in generale i millisecondi dalla "epoch" sono sempre in GMT .... non in un qualche fuso locale, es. italiano).
Comunque si risolve abbastanza facilmente:
Poi nel tuo caso:codice:public static void setTimeToCalendar(Calendar calendar, Time time) { Calendar timeCal = (Calendar) calendar.clone(); timeCal.setTime(time); calendar.set(Calendar.HOUR, timeCal.get(Calendar.HOUR)); calendar.set(Calendar.MINUTE, timeCal.get(Calendar.MINUTE)); calendar.set(Calendar.SECOND, timeCal.get(Calendar.SECOND)); calendar.set(Calendar.MILLISECOND, timeCal.get(Calendar.MILLISECOND)); }
codice:Calendar calendario = Calendar.getInstance(Locale.ITALY); setTimeToCalendar(calendario, appuntamento); // qui calendario ha l'ora dell'appuntamento
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ok grazie. Comunque ritornando alla classe Timer ho il seguente problema inserisco nel timer due Task , uno impostato alle ore 10, e l'altro alle 18. Il problema è che non so perchè si avvia il thread delle ore 18. Supponiamo che adesso 11:20 , inserisco questi due task quello che succede e che si avvia il task che dovrebbe avviarsi alle 18, mentre se imposto anche il primo task alle ore 11:30, ad esempio cioè facendo si che non sia passato il suo tempo allora tutto ok. Mi sapresti aiutare?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet