Visualizzazione dei risultati da 1 a 3 su 3

Discussione: GregorianCalendar

  1. #1

    GregorianCalendar

    Salve a tutti,
    stavo scrivendo un programma che calcolasse la differenza in frazioni di giorno tra due date e lo avevo scritto in questo modo:

    import java.util.Date;
    import java.util.GregorianCalendar;

    public class DateDiff
    {
    public static void main (String args [])
    {
    Date d1 = new GregorianCalendar(2000, 0, 1,12,0,0).getTime();
    Date d2 = new GregorianCalendar(2000,2,25,12,0,0).getTime();
    double diff = d2.getTime() - d1.getTime(); //ottengo i msec fra le due date
    // System.out.println(d1.getTime());
    // System.out.println(d2.getTime());
    System.out.println(diff/(1000 * 60 * 60 * 24));

    }
    }

    mi sono però accorto che usando questi metodi di java vengono tenute in conto le variazioni di orario dovute all'ora legale e solare, mentre il programma che devo scrivere io, riferendosi all'orario universale di Greenwich, non ne dovrebbe tenere conto.
    Volevo sapere se qualcuno conosceva un modo per risolvere questo problema.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: GregorianCalendar

    Originariamente inviato da minsceboo
    mi sono però accorto che usando questi metodi di java vengono tenute in conto le variazioni di orario dovute all'ora legale e solare, mentre il programma che devo scrivere io, riferendosi all'orario universale di Greenwich, non ne dovrebbe tenere conto.
    Se vedi, GregorianCalendar ha anche dei costruttori che ricevono un TimeZone. Ma se usi uno degli altri costruttori come quelli che ricevono anno, mese, giorno, ecc... il TimeZone non lo passi e lui usa quello di "default". Che, almeno qui in Italia, è il "Europe/Berlin" ed ha anche l'offset dell'ora legale.
    In sostanza i valori che passi sono relativi a questo TimeZone di default.

    Ma se vuoi che i dati usati per costruire il GregorianCalendar facciano riferimento al time-zone GMT, basta impostare il TimeZone!!

    codice:
    TimeZone gmt = TimeZone.getTimeZone ("GMT");
    
    GregorianCalendar c = new GregorianCalendar(2000, 0, 1,12,0,0);
    c.setTimeZone (gmt);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Perfetto..modificandolo come mi hai suggerito funziona perfettamente..
    Ci avevo fatto caso leggendo la documentazione della sun sull'esistenza della classe TimeZone ma non avevo capito bene come funzionase. Ti ringrazio veramente tanto. Di seguito lo posto così qualora servisse a qualcuno può trarne spunto. Grazie.

    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.TimeZone;

    public class DateDiff2
    {
    public static void main (String args [])
    {
    TimeZone gmt = TimeZone.getTimeZone ("GMT");
    GregorianCalendar a = new GregorianCalendar(2000, 0, 1,12,0,0);
    a.setTimeZone (gmt);
    Date d1 = a.getTime();
    GregorianCalendar b = new GregorianCalendar(2000,3,25,12,0,0);
    b.setTimeZone(gmt);
    Date d2 = b.getTime();
    double diff = d2.getTime() - d1.getTime();
    System.out.println(diff/(1000 * 60 * 60 * 24));

    }
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.