Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    [Java] Data in un intervallo variabile.

    Salve a tutti,
    ho un problemino.
    ho una serie di dati salvati in xml che hanno un campo data.
    il campo è formattato così: <date>Wed, 30 Apr 2008 23:41:00 +0000</date>
    ora, dovrei fare una cosa del genere:
    partire dal primo gennaio, impostare un tot di giorni di come finestra e vedere se la data ricade in quell'intervallo. a man mano spostare la finestra.

    ad esmpio, parto dal 1/1 e metto 10 giorni di finestra, quindi controllo se la data è tra l'1/1 e il 10/1, poi sposto e controllo che sia tra il 10/1 e il 20/1 ecc. ovviamente dovrebbe essere una data valida, non 30/1 e 40/1.

    ecco, qualcuno sa darmi una mano?

    ho visto che calendar è possibile sommare i giorni. ma come si controlla se cade in un intervallo?

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

    Re: [Java] Data in un intervallo variabile.

    Originariamente inviato da bako
    Salve a tutti,
    ho un problemino.
    ho una serie di dati salvati in xml che hanno un campo data.
    il campo è formattato così: <date>Wed, 30 Apr 2008 23:41:00 +0000</date>
    ora, dovrei fare una cosa del genere:
    partire dal primo gennaio, impostare un tot di giorni di come finestra e vedere se la data ricade in quell'intervallo. a man mano spostare la finestra.
    Innanzitutto quella data sottoforma di stringa la devi parsare e convertire in un Date e poi in un Calendar.

    Poi generi man mano le due date come dei Calendar (e per sommare giorni basta fare un add() sul campo DATE o DAY_OF_MONTH ... è lo stesso). Poi per confrontare 2 Calendar ci sono i metodi after()/before() e da Java 5 Calendar implementa Comparable.

    Il confronto comunque potresti farlo anche a livello di Date.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    ok,
    ho il date.
    ora, ho fatto così:


    edit
    codice:
            Date d_start = null;
            Date d_end = null;
            Calendar cal = Calendar.getInstance();
            if (d_start==null) {
                d_start = new Date("01/01/2008");
                cal.setTime(d_start);
                cal.add(Calendar.DATE, 10);
                d_end = cal.getTime();            
            }
    è giusto?

    ora, come si fa con date deprecato sul costruttore con stringa?

  4. #4
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    ma come funziona il after e before?

    codice:
                    if (cal_end.after(cal_post) && cal_start.before(cal_post)) {
                        between = true;
                    }
    cal_post sono calendar, se restitutisco la data me la da giusta.

    è giusto?
    se sì nn funziona.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    ora, come si fa con date deprecato sul costruttore con stringa?
    Quando si vuole fare il parsing di una stringa per ottenere un Date si deve usare un DateFormat/SimpleDateFormat.

    Nel tuo caso ti serve un SimpleDateFormat. Ma devi tenere presente alcune cose. Il SimpleDateFormat devi crearlo con un apposito pattern che corrisponda alla stringa in input (vedi tra gli esempi sulla documentazione, c'è quello che serve a te), devi crearlo con il Locale ENGLISH e devi impostare setLenient(false).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    a ok.
    ora il problema è usare l'after e before.

    codice:
           cal_start.setTime(d_start);
            cal_end.setTime(d_start);
            cal_end.add(Calendar.DATE, 100);
            if (cal_end.after(cal_start.getTime())) {
                System.out.println("after");
            } else if (cal_end.before(cal_start.getTime())) {
                System.out.println("before");
            } else {
                System.out.println(" come " +cal_start.getTime().toString() + " " + cal_end.getTime().toString() + " "  );
            }
    come output da

    codice:
     come Tue Jan 01 00:00:00 CET 2008 Thu Apr 10 00:00:00 CEST 2008
    come diavolo si usa quell'after e before?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    come diavolo si usa quell'after e before?
    cal1.after(cal2) e se ritorna true vuol dire che cal1 è superiore a cal2. Logica simile per before().

    Ma se fai: if (cal_end.after(cal_start.getTime()))

    è comunque sbagliato perché l'argomento è un Date e after() ritorna certamente false.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    sistemato grazie.
    ora, c'è un posto dove vedere cosa si usa al posto dei metodi deprecati?
    prativamente ora vorrei avere 2 numeri per l'anno 2 per il mese e 2 per il giorno. in una stringa dato un calendar o un date.
    es, se ho 14/10/2008 vorrei mi desse 141008 (a dire il vero al contrarrio 081014).

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    ora, c'è un posto dove vedere cosa si usa al posto dei metodi deprecati?
    Basta che guardi la documentazione javadoc delle API. Se un metodo è deprecato certamente lo segnala e magari indica anche eventuali alternative o riferimenti ad altre classi/metodi.

    Originariamente inviato da bako
    prativamente ora vorrei avere 2 numeri per l'anno 2 per il mese e 2 per il giorno. in una stringa dato un calendar o un date.
    es, se ho 14/10/2008 vorrei mi desse 141008 (a dire il vero al contrarrio 081014).
    Crea un SimpleDateFormat con il pattern per fare la stringa che hai appena detto e poi usa format().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    problema: c'è il metodo before e il metodo after. il problema è che la data è UGUALE. come posso controllarlo?
    praticamente ho le date di intervallo che sono a mezzanotte di un dì e a mezzanotte di quello dopo. una data da controllare è anch'essa a mezzanotte e quindi va in loop. come posso fare?

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.