Visualizzazione dei risultati da 1 a 10 su 38

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    ma se uso il metodo getTime , di java.sql.Time , dice che fa sempre riferimento alla zero epoch
    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.

    Quote Originariamente inviata da linux_r Visualizza il messaggio
    inoltre quando creo un nuovo oggetto Date, esso utilizza data e ora correnti , quindi non 00:00:00.
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    ah ok !! ti ringrazio tantissimo !!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    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.
    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:

    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));
    }
    Poi nel tuo caso:

    codice:
    Calendar calendario = Calendar.getInstance(Locale.ITALY);
    setTimeToCalendar(calendario, appuntamento);
    // qui calendario ha l'ora dell'appuntamento
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    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?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    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?
    Il Timer, quando usi il suo schedule(TimerTask task, Date time), schedula e ordina i task in base al Date ..... se i Date sono corretti non vedo come possa "sballare" l'ordinamento o fare altre cose strane.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da andbin Visualizza il messaggio
    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:

    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));
    }
    Poi nel tuo caso:

    codice:
    Calendar calendario = Calendar.getInstance(Locale.ITALY);
    setTimeToCalendar(calendario, appuntamento);
    // qui calendario ha l'ora dell'appuntamento
    Non ho capito bene cosa avviene nel primo metodo, ovvero cosa gli dovrei passare.
    In particolare le prime due istruzioni

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    se inserisco un date precedente alla data e all'ora attuali mi avvia il date successivo
    L'unica cosa certa e nota è che se scheduli un task ad un Date che è già "passato", quel task viene eseguito subito.

    Dal javadoc di schedule(TimerTask task, Date time):
    "If the time is in the past, the task is scheduled for immediate execution."

    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Non ho capito bene cosa avviene nel primo metodo, ovvero cosa gli dovrei passare.
    In particolare le prime due istruzioni
    Scusa ma ho anche fatto l'esempio d'uso!
    Passi a setTimeToCalendar un Calendar che ha la data che vuoi (l'ora è ininfluente), es. la data corrente e passi un Time (che ha solo l'ora). setTimeToCalendar "fonde" insieme data e ora in quello stesso oggetto Calendar passato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    ah ok grazieee.. però non ho capito come risolvi il problema gmt

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.