Massimo Caliman
Massimo Caliman
2 min read

Modified

Categories

  • java

Tags

  • Java8
  • jdk8
  • LocalTime
  • DateTimeFormatter

Languages

  • Italian

Parliamoci chiaro, anche se sei un Java Enthusiast della prima ora, anche se ami questo linguaggio quanto me, la gestione degli oggetti java.util.Date e java.sql.Date non ti è mai andata giù, vero? Ti sei addirittura convinto, col tempo, che avere un unico oggetto per gestire data e ora fosse tutto sommato comodo! E pazienza per quei metodi deprecati (oppure usavi la libreria Joda-Time…), beh, era vero nel 1998, si il secolo scorso, proprio così, perchè da allora ben poco o nulla è cambiato. Date un occhiata al codice sorgente della classe java.util.Date.

 * @author  James Gosling
 * @author  Arthur van Hoff
 * @author  Alan Liu
 * @see     java.text.DateFormat
 * @see     java.util.Calendar
 * @see     java.util.TimeZone
 * @since   JDK1.0
 */
public class Date implements java.io.Serializable, Cloneable, Comparable<Date> { 

Avete notato @since JDK1.0 ? E che dire di quei costuttori deprecati tanto comodi:

     * @param   year    the year minus 1900.
     * @param   month   the month between 0-11.
     * @param   date    the day of the month between 1-31.
     * @see     java.util.Calendar
     * @deprecated As of JDK version 1.1,
     * replaced by <code>Calendar.set(year + 1900, month, date)</code>
     * or <code>GregorianCalendar(year + 1900, month, date)</code>.
     */
    @Deprecated
    public Date(int year, int month, int date) {
        this(year, month, date, 0, 0, 0);
    }

Notare @deprecated As of JDK version 1.1

Per non parlare dei metodi come getYear(), fantastico! E se… “oh! domani si va in produzione non facciamo scherzi! codice che gira non si tocca! tanto i metodi deprecati ci seppelliscono tutti, figuarati, Oracle non li leva fino al 2030”

     * @deprecated As of JDK version 1.1,
     * replaced by <code>Calendar.get(Calendar.YEAR) - 1900</code>.
     */
    @Deprecated
    public int getYear() {
        return normalize().getYear() - 1900;
    }

Si, forse hai ragione (lo hai pensato anche tu, non negarlo). Ora però, se ci fosse qualcosa di meglio che ti semplificasse la vita, non lo useresti?

Beh, la prima impressione con LocalTime e LocalDate non è stata eccezionale, potevano fare qualcosa in più, per esempio rendere più immediato il passare dai vecchi oggetti Date ai nuovi LocalDate e LocalTime, ma se ci pensate, forse è meglio così, nuovo progetto, solo oggetti LocalDate e LocalTime.

Per oggi iniziamo con qualcosa di molto elementare, ma che facciamo di sovente

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

passare da una rappresentazione testuale (HH:mm) ad un oggetto LocalTime, e viceversa. Sotto trovate il codice.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime localTime1 = LocalTime.now();
String localTime1AsString = formatter.format(localTime1);        
System.out.println("localTime1AsString:"+localTime1AsString);
//From String HH:mm To LocalTime object (parsing)
LocalTime lTime = LocalTime.parse("23:59",formatter);
System.out.println("lTime.toString()"+lTime.toString());