Ottenere una data senza orario

di il
7 risposte

Ottenere una data senza orario

Salve a tutti, vi scrivo perchè dovrei inserire e ottenere una data senza l'indicazione dell'orario. Provando a maneggiare la classe DateFormat non riesco nell'intento. Il codice non dà errori, risulta correttamente, salvo il fatto che mi viene stampata anche l'ora, cosa di cui voglio fare a meno. Potreste darmi una mano? Ho cercato un po' in giro di capire come fare, ma non ho trovato nulla.
Questo è il codice:
public void PrenotazioneMezzo() {
	  
	  Date d = new Date();
	  
	  String s;
	  Scanner input = new Scanner  (System.in);
	  System.out.println("Digiti il modello di veicolo che vuole prenotare");
	  String sceltaModello = input.nextLine();
	  boolean prenotato = false;
	  while (!prenotato) {
		  for ( Veicolo v : listaVeicoli) {
			  if (v.getModello().equalsIgnoreCase(sceltaModello)) {
				  System.out.println("Immetta il suo nome e cognome");
				  String cliente = input.nextLine();
				  
				  System.out.println("Immetta la data del giorno in cui vuole prenotare il mezzo [gg/mm/aaaa]");
				 
				   s = input.nextLine();
				   try {
					   
					   DateFormat formatoData = DateFormat.getDateInstance(DateFormat.SHORT, Locale.ITALY);
					   formatoData.setLenient(false);
					   
					   d = formatoData.parse(s);
					   
					  
					  
				   }
				   catch (ParseException e) {
					   System.out.println("Data non valida");
				   }

7 Risposte

  • Re: Ottenere una data senza orario

    ytreka ha scritto:


    Salve a tutti, vi scrivo perchè dovrei inserire e ottenere una data senza l'indicazione dell'orario. Provando a maneggiare la classe DateFormat non riesco nell'intento.
    La questione non sta nel DateFormat. Date è un "istante" nel tempo con la precisione del millisecondo a partire dalla "epoch" (solito 1 gennaio 1970). Quindi se lo stampi banalmente println(d) l'orario comunque lo mostra (il toString() di Date dà un formato fisso).

    Quindi la questione è: a cosa/dove ti serve poi il java.util.Date?

    Se vuoi trattare meglio solo le date, usa la Date/Time API di Java 8, quindi java.time.LocalDate.
  • Re: Ottenere una data senza orario

    Devo simulare la prenotazione di un'auto da parte di un cliente, quindi chiedo all'utente di inserire la data e poi nel riepilogo vorrei mi stampasse, tra le altre cose, anche la data scelta da quest'ipotetico cliente. Riesce bene, solo che aggiunge anche un orario randomico di cui non ho bisogno. la Date/Time Api di Java mi consente di ottenere questo risultato?
  • Re: Ottenere una data senza orario

    ytreka ha scritto:


    poi nel riepilogo vorrei mi stampasse, tra le altre cose, anche la data scelta
    Basterebbe riformattarla con quello stesso DateFormat.

    Nota: con DateFormat.SHORT l'anno è a 2 cifre in format! (ma in parsing accetta 4 cifre)

    ytreka ha scritto:


    solo che aggiunge anche un orario randomico
    No, l'orario non è "a caso", al massimo è 00:00:00 nel fuso orario corrente.

    ytreka ha scritto:


    la Date/Time Api di Java mi consente di ottenere questo risultato?
    Il LocalDate è SOLO una data, non ha altre informazioni. Ma va comunque parsato da String e poi eventualmente riformattato ove necessario.
  • Re: Ottenere una data senza orario

    E come si fa a riformattarla con quello stesso DateFormat ? Qual è il metodo che mi occorre?
  • Re: Ottenere una data senza orario

    ytreka ha scritto:


    E come si fa a riformattarla con quello stesso DateFormat ? Qual è il metodo che mi occorre?
    DateFormat formatoData = DateFormat.getDateInstance(DateFormat.SHORT, Locale.ITALY);
    
    Date d = formatoData.parse("21/08/2021");
    System.out.println(d);                       // Stampa Sat Aug 21 00:00:00 CEST 2021  a causa del toString() !!!
    System.out.println(formatoData.format(d));   // Stampa 21/08/21
    Se vuoi la forma gg/mm/aaaa devi per forza usare un SimpleDateFormat con il pattern apposito.

    Per l'italiano getDateInstance purtroppo non dà l'anno a 4 cifre per SHORT. E il MEDIUM invece passa già al formato letterale (es. "21 ago 2021")
  • Re: Ottenere una data senza orario

    Grazie infinite, non riuscivo proprio a capire come fare...quindi la formattazione si fa costruendo e istanziando un oggetto di tipo DateFormat e poi richiamando su questo il metodo format, passandogli come parametro la data che vuoi visualizzare. Tutto chiaro! Dubito ci sarei arrivato.
  • Re: Ottenere una data senza orario

    ytreka ha scritto:


    quindi la formattazione si fa costruendo e istanziando un oggetto di tipo DateFormat e poi richiamando su questo il metodo format
    Un DateFormat può fare:
    - parsing; parse() (cioè String --> Date)
    - formatting; format() (cioè Date --> String)

    ytreka ha scritto:


    Dubito ci sarei arrivato.
    Bastava leggere il javadoc: https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/text/DateFormat.html
Devi accedere o registrarti per scrivere nel forum
7 risposte