Qual è il modo accettato per sostituire java.util.Date(anno,mese,giorno)

2022-07-29 13:00:33

Sto cercando di fare qualcosa di veramente semplice, ma comincio a rendermi conto che le date in Java sono un po' un campo minato. Tutto quello che voglio è superare gruppi di tre int (un anno, un mese e una data) creare alcuni oggetti Date, fare dei semplici test su di essi (sulla falsariga di come data A prima data B e dopo il 1 gennaio 1990), convertirli in oggetti java.sql.Date e passarli al database tramite JDBC.

Tutto molto semplice e funziona bene usando il costruttore java.util.Date(int year,int month,int day). Ovviamente quel costruttore è deprezzato e vorrei evitare di usare chiamate deprezzate nel nuovo codice che sto scrivendo. Tuttavia, tutte le altre opzioni per risolvere questo semplice problema sembrano stupidamente complicate. Non c'è davvero un modo semplice per fare ciò che voglio senza usare costruttori deprezzati?

So che la risposta standard a tutte le domande relative alla data Java è "usa joda time", ma non voglio davvero iniziare a estrarre librerie di terze parti per un problema apparentemente banale.

- dagw

Source
Risposta


31
  • L'idea è di utilizzare Calendar classe, in questo modo:

    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    Date date = cal.getTime();
    

    In effetti, se controlli il Javadoc di costruttore che stai menzionando, è esattamente ciò che viene suggerito:

    Date(int year, int month, int date)
              Deprecated. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date).
    

    Oppure... usa JodaTime :-).