martedì 27 aprile 2010

Java: le date

Date è stata la classe suggerita da Java per la gestione delle date fino alla versione 1.1 di JDK. L'uso di Date è adesso deprecato, vietato. La stessa classe è stata finora tenuta nelle versioni successive di JDK solo per problemi di compatibilità verso quei programmi ormai già scritti. Adesso Java suggerisce di usare la classe Calendar, una classe astratta, oppure la classe GregorianCalendar. Quest'ultima estende proprio la classe Calendar, assai più generica, realizzando di fatto la classe ormai più usata per la rappresentazione delle date.
Invocando il costruttore della classe GregorianCalendar, senza parametri, si genera una data che rappresenta l'istante di tempo corrente. E' poi possibile specificare, attraverso un secondo costruttore, i valori che dovranno caratterizzare la data. Entrambi i costruttori sono usati nell'esempio che a breve segue.
La classe GregorianCalendar implementa diversi metodi per la gestione delle date, eccone alcuni:
  • boolean equals(Object another): confronta l'oggetto (implicito) con l'oggetto another e ritorna true se entrambi si riferiscono allo stesso istante temporale, altrimenti false;
  • boolean before(Object another): confronta l'oggetto (implicito) con l'oggetto another e ritorna true se il primo precede l'altro, altrimenti false;
  • boolean after(Object another): confronta l'oggetto (implicito) con l'oggetto another e ritorna true se il primo viene dopo l'altro, altrimenti false;
  • int get(int field): ritorna un particolare valore del campo data. L'intero usato per specificare il campo può essere, ad esempio, uno delle seguenti costanti: Calendar.YEAR, Calendar.MONTH e Calendar.DATE. Per altri valori consultare la documentazione in linea di Java;
  • void set(int field, int value): imposta il campo al valore indicato;
  • void add(int field, int step): aggiunge al campo la quantità indicata;


/* Testing di alcuni metodi della classe GregorianCalendar */
import javax.swing.*;
import java.util.*;

public class DateTest {
   public static void main(String args[]) {
      GregorianCalendar now=new GregorianCalendar();
      int year=now.get(Calendar.YEAR);
      int month=now.get(Calendar.MONTH)+1;
      int day=now.get(Calendar.DATE);
      String input=JOptionPane.showInputDialog("Giorno: ");
      int birthdayDay=Integer.parseInt(input);
      input=JOptionPane.showInputDialog("Mese: ");
      int birthdayMonth=Integer.parseInt(input);
      input=JOptionPane.showInputDialog("Anno: ");
      int birthdayYear=Integer.parseInt(input);
      GregorianCalendar birthday=new GregorianCalendar(birthdayYear,birthdayMonth-1,birthdayDay);
      int temp=0;
      while (!birthday.after(now)) {
         birthday.add(Calendar.DATE,1);
         temp++;
      }
      System.out.println("Oggi:\t\t"+day+"/"+month+"/"+year);
      System.out.println("Compleanno:\t"+birthdayDay+"/"+birthdayMonth+"/"+birthdayYear);
      System.out.println("Anni:\t\t"+temp/365);
   }
}

Nessun commento:

Posta un commento