DOMANDA Java, confusione con le date

Pubblicità

Paakiv

Utente Attivo
Messaggi
580
Reazioni
13
Punteggio
55
Buonasera a tutti.
Sono alle prime armi con Java e mi sono trovato con un tipo di dato Data, scusate il gioco di parole.
Semplicemente non capisco come passare in input dal main quando chiamo una nuova istanza dell'oggetto, mi da sempre errore, ma ovviamente nel costruttore è richiesta, non capisco neanche come scegliere il formato.
Un'altra cosa che ho provato a fare e la differenza tra due date e nonostante la ricerca di funzioni già pronte su Google ho avuto scarso successo.
Infine vorrei ordinare i un ArrayList i miei Oggetti in base alla data. Avete presente quando nelle cartelle del vostro pc avete molti file e potete ordinarli in base al nome, al tipo, dimensione, etc...? Ecco vorrei fare così nel mio array con la data ma poter scegliere se per mese, giorno o anno.
Cercando ho trovato solo robe con i millisecondi quindi sono parecchio confuso.
Qualcuno sa darmi delle dritte? Grazie!
 
Codice:
CLASSE

public class Persona {
    private String nome;
    private String cognome;
    private Date datanascita;
    private String luogonascita;

    public Persona(String nome, String cognome, Date datanascita, String luogonascita) {
        this.nome = nome;
        this.cognome = cognome;
        this.datanascita = datanascita;
        this.luogonascita = luogonascita;
   }

    public void bubbleSort(???) { //Voglio ordinare le istanze Persona in un array in base alla data di nascita
      ???
   }

   public ??? Differenza Date(Date d1, Date d2){
      d3 = d2-d1; //Non funziona, dovrebbe restituirmi il numero di giorni.
   }
}

ISTANZA NEL MAIN
Persona p = new Persona("Aieie", "Brazov",  ???, "Macedonia"); //Come passo la data di nascita al costruttore? "31-01-1987" non viene accettata

Ho messo solo i pezzi di codice interessati, il mio è principalmente un problema di sintassi e di poca conoscenza di funzioni che già esistono. Ho messo i punti interrogativi dove non so cosa mettere! Grazie!

PS: Non so perchè non appare indentato il codice.
 
Ultima modifica:
In primis per il metodo sulle date cosa vuoi che ti restituisca?? Dato che e una differenza credo tu debba fare il metodo public int datadifferenza(Date a, date b){}

Chiaramente dentro il metodo dovrai estrarre i vari valori dalle date e restituire la differenza tra a e b

Poi x ordinare un vettore puoi usare vari algoritmi di ordinamento tra cui insertion sort bubblesort bucketsort quicksort e via via dicendo ricordando le varie notazioni di algoritmi

Poi per creare un nuovo oggetto di tipo persona passi come variabili tutti gli attributi che ti servono
 
Se vuoi usare una Date devi istanziarla da qualche parte, puoi farlo nel main (o dove ti pare) con un new Date() oppure all'interno del costruttore di Persona. Nel primo caso puoi tenere il costruttore di Persona cosi come lo hai definito, nel secondo dovrai modificare la firma passando passando invece una stringa e facendo quindi la new successivamente.
La comparazione puoi farla usando i metodi di Date (qui trovi tutto) senza reinventare la ruota.
Infine per ordinarli, assumendo che tu sappia implementare un qualche algoritmo di ordinamento, puoi fare un metodo getDate che ritorna la data di nascita e quindi lo confronti con l'opportuno metodo di cui sopra.

Occhio che molti metodi di Date sono deprecati - tra cui Date(int year, int month, int date, int hrs, int min) - e sarebbe quindi meglio abbandonarli. Qui altre informazioni
 
la classe Date è sconsigliata insieme a tutti i suoi metodi, inoltre non permette di fare operaziooni di differenza tra date (come in SQL);
dai un'occhiata alle classi LocalDate e/o LocalDateTime in java.time
 
Mi sono spiegato male.
La differenza tra date dovrebbe restit
In primis per il metodo sulle date cosa vuoi che ti restituisca?? Dato che e una differenza credo tu debba fare il metodo public int datadifferenza(Date a, date b){}

Chiaramente dentro il metodo dovrai estrarre i vari valori dalle date e restituire la differenza tra a e b

Poi x ordinare un vettore puoi usare vari algoritmi di ordinamento tra cui insertion sort bubblesort bucketsort quicksort e via via dicendo ricordando le varie notazioni di algoritmi

Poi per creare un nuovo oggetto di tipo persona passi come variabili tutti gli attributi che ti servono

Mi sono spiegato male.
La differenza tra date dovrebbe restituirmi il numero in giorni suppongo, o non so se si può in altri formati, dovrebbe essere int.
Il problema è che quando chiamo la funzione o Persona nel main, al campo Date datanascita non so cosa dare, come scrivere questa data: gg/mm/aaaa, gg/mm/aa, "aa/mm/gg" etc...
Gli algoritmi di ordinamento li conosco, li ho impararti al mio primi approccio alla programmazione, in C, anche se a memoria non li ricordo. Li so usare per gli int. Volendo ordinare le Persona nell'array in base alla data, come passo il parametro e modifico il codice affinchè utilizzi la data e non l'int?
 
decidi tu lo string format della data puoi scriverla in diversi modi ad esempio

yyyy-mm-dd:HH-mm-ss oppre yyyy-mm-dd oppure yyyy/mm/dd oppure dd-mm-yyyy

se cerchi su google trovi miliardi di esempi

ad esempio

Codice:
public class DatesDiff {
   public static void main(String[] args) {
       try {
           String strDate1 = "2007/04/15 12:35:05";
           String strDate2 = "2009/08/02 20:45:07";

           SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
           fmt.setLenient(false);

           // Parses the two strings.
           Date d1 = fmt.parse(strDate1);
           Date d2 = fmt.parse(strDate2);

           // Calculates the difference in milliseconds.
           long millisDiff = d2.getTime() - d1.getTime();

           // Calculates days/hours/minutes/seconds.
           int seconds = (int) (millisDiff / 1000 % 60);
           int minutes = (int) (millisDiff / 60000 % 60);
           int hours = (int) (millisDiff / 3600000 % 24);
           int days = (int) (millisDiff / 86400000);

           System.out.println("Between " + strDate1 + " and " + strDate2 + " there are:");
           System.out.print(days + " days, ");
           System.out.print(hours + " hours, ");
           System.out.print(minutes + " minutes, ");
           System.out.println(seconds + " seconds");
       } catch (Exception e) {
           System.err.println(e);
       }
   }
}
 
Se vuoi usare una Date devi istanziarla da qualche parte, puoi farlo nel main (o dove ti pare) con un new Date() oppure all'interno del costruttore di Persona. Nel primo caso puoi tenere il costruttore di Persona cosi come lo hai definito, nel secondo dovrai modificare la firma passando passando invece una stringa e facendo quindi la new successivamente.
La comparazione puoi farla usando i metodi di Date (qui trovi tutto) senza reinventare la ruota.
Infine per ordinarli, assumendo che tu sappia implementare un qualche algoritmo di ordinamento, puoi fare un metodo getDate che ritorna la data di nascita e quindi lo confronti con l'opportuno metodo di cui sopra.

Occhio che molti metodi di Date sono deprecati - tra cui Date(int year, int month, int date, int hrs, int min) - e sarebbe quindi meglio abbandonarli. Qui altre informazioni
Quindi dovrei fare Persona p = new Persona ("Pinco", "Pallino", new Date(06-02-2018) , "Venezia") ?
Non riesco a trovare la comparazione nel link che mi hai mandato. Provo quello che mi ha scritto l'utente sotto di te
 
si oppure crei la data prima e la passi al costruttore

esempio

Date datanasc = new Date("01-01-2000");
Persona p = new Persona("Pippo", "pluto", datanasc, "Varese");
 
Pubblicità
Pubblicità
Indietro
Top