Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] Problemi con le date

    Ciao a tutti!
    Sono sempre alle prese con quell'applicazione maneggia-date...stavolta con un altro JButton che dovrebbe consentirmi di aggiungere del tempo (giorni o mesi) ad una data.
    Per fare ciò per prima cosa "estraggo" i dati immessi nei JTextField in delle stringhe, poi con un parsing li porto all'interno di int creati per l'occasione, creo un GregorianCalendar e aggiungo il tutto, quindi in teoria dovrei essere pronto per dare un output (posto qui sotto la classe):
    codice:
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Aggiungi tempo:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String EGiorno = ggEnd.getText ();
    	String EMese = mmEnd.getText ();
    	String EAnno = yyEnd.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    //Tempo da aggiungere
    	int Agg = Integer.parseInt(EGiorno);
    	int Amm = Integer.parseInt(EMese);
    	int Ayy = Integer.parseInt(EAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Aggiunte
    	cal.add(Calendar.DAY_OF_MONTH, Agg);
    	cal.add(Calendar.MONTH, Amm);
    //	add(Calendar.YEAR, Ayy);
    
    	testoOutput.setText(day +"/"+ month +"/"+ year);
    		}
    	}
    il problema è che però l'output non fa una piega. La stringa resta ferma ad "inserire i dati". Qualcuno sa aiutarmi?
    Vi ringrazio in anticipo!!
    Gato

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

    Re: [JAVA] Problemi con le date

    Originariamente inviato da fpertegato
    creo un GregorianCalendar e aggiungo il tutto, quindi in teoria dovrei essere pronto per dare un output (posto qui sotto la classe):
    codice:
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Aggiunte
    	cal.add(Calendar.DAY_OF_MONTH, Agg);
    	cal.add(Calendar.MONTH, Amm);
    //	add(Calendar.YEAR, Ayy);
    
    	testoOutput.setText(day +"/"+ month +"/"+ year);
    Io l'unica cosa che vedo è che istanzi un GregorianCalendar (correttamente), ci aggiungi qualcosa sui campi del giorno e del mese (per l'anno no... boh, l'hai commentato e comunque mancherebbe cal. ) poi questo 'cal' NON lo usi più da alcuna parte. E in un campo di testo ci metti una data composta con i day, month, year originali.

    E che serve? Ora è più chiaro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Si, un po' si...
    per l'anno no... boh, l'hai commentato e comunque mancherebbe cal
    l'avevo commentato perchè mi dava errore in compilazione ma non capivo perchè, poi nel frattempo ho capito che l'errore stava nella mancanza di "cal."

    codice:
    poi questo 'cal' NON lo usi più da alcuna parte. E in un campo di testo ci metti una data composta con i day, month, year originali.  E che serve? Ora è più chiaro?
    ecco, è qui che non mi raccapezzo. Ti chiedo scusa per la banalità ma il GregorianCalendar lo sto studiando ora..

    non capisco:
    codice:
    testoOutput.setText(cal.add(Calendar.DAY_OF_MONTH, Agg) + (Calendar.MONTH, Amm) + cal.add(Calendar.YEAR, Ayy);
    secondo te può andar bene?
    se voglio aggiungere solo un mese non rischio che,essendo gli altri campi essendo a 0 comportino degli errori?
    Gato

  4. #4
    Ho provato scrivendo:
    codice:
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Aggiungi tempo:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String EGiorno = ggEnd.getText ();
    	String EMese = mmEnd.getText ();
    	String EAnno = yyEnd.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    //Tempo da aggiungere
    	int Agg = Integer.parseInt(EGiorno);
    	int Amm = Integer.parseInt(EMese);
    	int Ayy = Integer.parseInt(EAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Aggiunte
    	testoOutput.setText(cal.add(Calendar.DAY_OF_MONTH, Agg) + cal.add(Calendar.MONTH, Amm) + cal.add(Calendar.YEAR, Ayy));
    ma ora in compilazione mi da l'errore:
    codice:
    myCalendar7.java:223: 'void' type not allowed here
    	testoOutput.setText(cal.add(Calendar.DAY_OF_MONTH, Agg) + cal.add(Calendar.MONTH, Amm) + cal.add(Calendar.YEAR, Ayy));
    	                           ^
    myCalendar7.java:223: 'void' type not allowed here
    	testoOutput.setText(cal.add(Calendar.DAY_OF_MONTH, Agg) + cal.add(Calendar.MONTH, Amm) + cal.add(Calendar.YEAR, Ayy));
    	                                                        ^
    2 errors
    credo che il problema sia qui giusto?
    codice:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    Gato

  5. #5
    posto il codice per intero, così magari si capisce meglio:
    codice:
    import java.text.SimpleDateFormat;
    import java.text.ParseException;
    
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    import java.lang.*;
    import java.util.*;
    
    import java.util.Calendar;
    
    public class myCalendar7 extends JApplet {
    
        JButton[] bottone;
        JPanel pannelloBottoni;
        JPanel pannelloCampi;
        Container pannelloApplet;
    
        public JTextField ggStart = new JTextField(10);
        public JTextField mmStart = new JTextField(10);
        public JTextField yyStart = new JTextField(10);
    
        public JTextField ggEnd = new JTextField(10);
        public JTextField mmEnd = new JTextField(10);
        public JTextField yyEnd = new JTextField(10);
    
    //	Labels della data iniziale
        public JLabel gS = new JLabel("Giorno iniziale:");
        public JLabel mS = new JLabel("Mese iniziale:");
        public JLabel yS = new JLabel("Anno iniziale:");
    
    //	Labels della data finale
        public JLabel gE = new JLabel("Giorno finale:");
        public JLabel mE = new JLabel("Mese finale:");
        public JLabel yE = new JLabel("Anno finale:");
    
    //	Label TestoOutput
    
        public JLabel Output = new JLabel("Risultato:");
        public JTextArea testoOutput = new JTextArea();
    
        public void init() {
    
    //   Settaggio testo
    	testoOutput.setEditable(false);
    	testoOutput.setText("Inserire i dati");	
    
    	// Definisco il layout dell'applet: 
    
    	pannelloApplet = getContentPane();
    	pannelloApplet.setLayout(new BorderLayout());
    
    	// inseriremo i 6 bottoni non direttamente dell'applet, 
    	// ma in un pannello che verra' inserito nel centro dell'
    	// applet. Costruiamo il pannello: 
    
    	pannelloBottoni = new JPanel();
    
    	// dispongo i 6 bottoni in una griglia 3 x 2:
    	pannelloBottoni.setLayout(new GridLayout(3, 2));
    	// definisco il colore di fondo del pannelloBottoni:
    	pannelloBottoni.setBackground(Color.black);
    
    	// definisco un array di 6 bottoni.
    	bottone = new JButton[9];
    
    	// inizializzo i 6 bottoni e li aggiungo al pannelloBottoni.
    	// Etichetta dei bottoni:
    	String[] nomeBottone = {"Componi data", "Data corrente", "Controllo data", 
    				"Aggiungi tempo", "bott. 5", "bott. 6",
    				"bott. 7", "bott. 8", "bott. 9"};
    
    	// Colore di sfondo dei bottoni: 
    	Color[] coloreBottone = {Color.red, Color.white, Color.yellow,
    				 Color.cyan, Color.green, Color.magenta,
    				Color.red, Color.white, Color.yellow};
    
    	for (int i = 0; i < bottone.length; i++) {
    	    bottone[i] = new JButton(nomeBottone[i]);
    	    bottone[i].setBackground(coloreBottone[i]);
    	    pannelloBottoni.add(bottone[i]);}
    
    	// inserisco il pannelloBottoni a sud dell'applet: 
    	pannelloApplet.add(pannelloBottoni, BorderLayout.SOUTH);
    
    //	Definisco il pannello e i campi d'Input che dovrà contenere:
    	JPanel pannelloCampi = new JPanel();
    	pannelloCampi.setLayout(new GridLayout(2,6,0,0));
    
    //	Inserisco in pannelloCampi la data iniziale, quella finale ed il testo di output:
    //   Data START
    	pannelloCampi.add(gS);
    	pannelloCampi.add(ggStart);
    
    	pannelloCampi.add(mS);
    	pannelloCampi.add(mmStart);
    
    	pannelloCampi.add(yS);
    	pannelloCampi.add(yyStart);
    
    //   Data END
    	pannelloCampi.add(gE);
    	pannelloCampi.add(ggEnd);
    
    	pannelloCampi.add(mE);
    	pannelloCampi.add(mmEnd);
    
    	pannelloCampi.add(yE);
    	pannelloCampi.add(yyEnd);
    
    	// inserisco il pannelloCampi a nord dell'applet:
    	pannelloApplet.add(pannelloCampi, BorderLayout.NORTH);
    
    //	Definisco il pannello e gli Item che dovrà contenere:
    	JPanel pannelloOut = new JPanel();
    	pannelloOut.setLayout(new FlowLayout());
    
    //   OutPut
    	pannelloOut.add(Output);
    	pannelloOut.add(testoOutput);
    
    	pannelloApplet.add(pannelloOut, BorderLayout.CENTER);
    
    	Receiver1 receiver1 = new Receiver1();
    	Receiver2 receiver2 = new Receiver2();	//	ActionListener(s) 
    	Receiver3 receiver3 = new Receiver3();	//- da implementare dopo questa classe -
    	Receiver4 receiver4 = new Receiver4();
    	Receiver5 receiver5 = new Receiver5();
    	Receiver6 receiver6 = new Receiver6();
    
    	//		assegnazione ActionListener(s) ai corrispondenti JButton(s)
    	bottone[0].addActionListener(receiver1);
    	bottone[1].addActionListener(receiver2);
    	bottone[2].addActionListener(receiver3);
    	bottone[5].addActionListener(receiver6);
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Componi data:
        class Receiver1 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String giorno = ggStart.getText ();
    	String mese = mmStart.getText ();
    	String anno = yyStart.getText ();
    
    	testoOutput.setText(giorno + "/" + mese + "/" + anno + "<--------->" + anno + "/" + mese + "/" + giorno);
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone :
        class Receiver2 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	Calendar cal = new GregorianCalendar();
    	testoOutput.setText(cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.YEAR));
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Controllo data:
        class Receiver3 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Parsing:
    
    	int day=Integer.parseInt(SGiorno);
    	int month=Integer.parseInt(SMese);
    	int year=Integer.parseInt(SAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Le stringhe sono oggetti "immutabili". Non esiste un metodo setText()
    // né esiste un qualche altro metodo che modifica lo stato dell'oggetto String.
    
            try {
    	cal.get (Calendar.DATE);
    	      testoOutput.setText(day +"/"+ month +"/"+ year + ": data corretta.");
    
    	} catch (IllegalArgumentException i) {
    	      testoOutput.setText(day +"/"+ month +"/"+ year + ": data errata.");
    	}
          }
        }
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Aggiungi tempo:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String EGiorno = ggEnd.getText ();
    	String EMese = mmEnd.getText ();
    	String EAnno = yyEnd.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    //Tempo da aggiungere
    	int Agg = Integer.parseInt(EGiorno);
    	int Amm = Integer.parseInt(EMese);
    	int Ayy = Integer.parseInt(EAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Aggiunte
    	testoOutput.setText(cal.add(Calendar.DAY_OF_MONTH, Agg) + cal.add(Calendar.MONTH, Amm) + cal.add(Calendar.YEAR, Ayy));
    /*	cal.add(Calendar.DAY_OF_MONTH, Agg);
    	cal.add(Calendar.MONTH, Amm);
    	cal.add(Calendar.YEAR, Ayy);
    
    	testoOutput.setText(day +"/"+ month +"/"+ year);*/
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Controllo data:
        class Receiver5 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone :
        class Receiver6 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    		}
    	}
    }
    Gato

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fpertegato
    ecco, è qui che non mi raccapezzo.

    non capisco:
    codice:
    testoOutput.setText(cal.add(Calendar.DAY_OF_MONTH, Agg) + (Calendar.MONTH, Amm) + cal.add(Calendar.YEAR, Ayy);
    secondo te può andar bene?
    No, non ha senso. E tra l'altro non "compila" nemmeno perché add() ha tipo di ritorno void (e se anche compilasse, le somme non avrebbero senso lo stesso).

    1) Istanzi il GregorianCalendar con giorno/mese/anno di "input" (ricordarsi sempre che il mese è 0-based)

    2) Esegui gli add() per i campi interessati. add() non restituisce nulla, aggiorna solo lo "stato" interno del calendar, facendo l'eventuale "riporto" sui campi più significativi (es. se sono le 23:59:59 e aggiungi 1 secondo, più campi cambiano, compreso il DAY_OF_MONTH.

    3) Puoi prendere con get() i singoli campi e comporre tu una stringa mettendo dei separatori in mezzo oppure puoi prendere il Date dal calendar e formattarlo con un SimpleDateFormat.

    Originariamente inviato da fpertegato
    se voglio aggiungere solo un mese non rischio che,essendo gli altri campi essendo a 0 comportino degli errori?
    No, se aggiungi 0 su un campo, tecnicamente non fa nulla.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Proprio non capisco, sarò anche duro di comprendonio o forse è che non sono abituato al linguaggio tecnico...
    codice:
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Aggiungi tempo:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String EGiorno = ggEnd.getText ();
    	String EMese = mmEnd.getText ();
    	String EAnno = yyEnd.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    //Tempo da aggiungere
    	int Agg = Integer.parseInt(EGiorno);
    	int Amm = Integer.parseInt(EMese);
    	int Ayy = Integer.parseInt(EAnno);
    
    //qui istanzio il calendario con anno mese giorno di input
            GregorianCalendar cal = new GregorianCalendar (year, month1, day);
            cal.setLenient (false);
    
    //qui eseguo gli add per i campi interessati
    	cal.add(Calendar.DAY_OF_MONTH, Agg);
    	cal.add(Calendar.MONTH, Amm);
    	cal.add(Calendar.YEAR, Ayy);
    
    //qui compongo una stringa usando get()
    	testoOutput.setText(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH));
    non capisco dove sto sbagliando
    Gato

  8. #8
    Ok, ora ho capito dove sbagliavo!!
    codice:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String EGiorno = ggEnd.getText ();
    	String EMese = mmEnd.getText ();
    	String EAnno = yyEnd.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    //Tempo da aggiungere
    	int Agg = Integer.parseInt(EGiorno);
    	int Amm = Integer.parseInt(EMese);
    	int Ayy = Integer.parseInt(EAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Aggiunte
    	cal.add(Calendar.DAY_OF_MONTH, Agg);
    	cal.add(Calendar.MONTH, Amm);
    	cal.add(Calendar.YEAR, Ayy);
    
    //Fine
    	testoOutput.setText(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH));
    
    		}
    	}
    hihi ci ho messo un bel po'...
    Gato

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.