I costruttori con parametri della classe java.util.Date sono deprecati. Qual è l'alternativa?

StackOverflow https://stackoverflow.com/questions/1874298

  •  18-09-2019
  •  | 
  •  

Domanda

Cosa posso usare per sostituire questo, new Date(2009, 12, 9)?

Grazie per il vostro aiuto.

È stato utile?

Soluzione

Idealmente, utilizzare Joda Tempo . Si tratta di un'API infinitamente superiore a quello incorporato. Farebbe quindi desidera scegliere tra LocalDateTime e DateTime a seconda delle vostre esigenze (è una zona complicata - non ho intenzione di provare a riassumere in una frase o due, ma il docs fare un buon lavoro).

Se assolutamente necessario, usare un java.util .calendar e convertire che ad un Date quando è necessario.

Altri suggerimenti

Calendario!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Si noti che non ho messo 12 per dicembre, perché è in realtà 11 (Gennaio è 0).

Quindi, è possibile aggiungere o rimuovere secondi, minuti, ore, giorni, mesi o anni facilmente con:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

E infine, se si desidera una data:

cal.getTime();

Se si guarda alla Javadoc ti punta verso l'utilizzo di Calendario .

  

A partire da JDK versione 1.1, sostituito da Calendar.set (anno + 1900, il mese,   data, ore, minuti) o GregorianCalendar (anno + 1900, mese, giorno, ore,   min).

Se si guarda il costruttore Date params vedrete il motivo per cui è stata sconsigliata:

  

Parametri:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

year non è quello che ci si aspetta e nessuno dei due è month.

Per rappresentare la data che hai citato è necessario chiamare Date come questo (non raccomandato)

new Date(2009-1900, 12-1, 9)

L'alternativa utilizzando Calendar è

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();

È inoltre possibile utilizzare il SimpleDateFormat oggetto:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}

Tim, nei vostri commenti lei ha detto che si sta facendo questo in un contesto GXT - vale a dire in GWT codice client. GWT non supporta GregorianCalendar e sarà molto probabilmente non sarà in grado di mettere JodaTime attraverso la GWTCompiler (si può essere in grado di, ma non si vuole veramente).

Credo che si sono lasciati davvero con la possibilità di utilizzare JNSI se si vuole fare operazioni di calendario in GWT. Vedere la classe Date in JavaScript.

Purtroppo supporto data in Java è completamente terribile. Ufficialmente, si sarebbe probabilmente fare questo con il calendario, ma che non dovrebbe essere necessario a mio parere. Come altri hanno già detto, il tempo Joda è molto meglio, ma ancora non è così facile da usare come date in Ruby on Rails.

Non sono a conoscenza di qualsiasi pacchetto Java che ti dà abbastanza quella quantità di sostegno data (Joda è inferiore un po ', ma si avvicina), ma in Groovy, utilizzando TimeCategory ti dà molto Ruby on Rails sostegno data-like.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top