Data

Con questo programma in Java sarete in grado di operare con le date!

public class Data {
	// stato dell'oggetto Data
	private int giorno;
	private int mese;
	private int anno;

	// non fa parte dello stato
	private static String[] mesi = new String[] {		// Array dei mesi per la conversione in parola
		"gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", 
		"luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"
	};		// così lo creo una volta soltanto e non spreco memoria - devo necessariamente dichiarare campi static fuori dai metodi

	private boolean bisestile (int anno) {
		return anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0);
	}
	
	private void controllaData () {
		int[] giorniDelMese = getGiorniDelMese();
		
		if (anno < 1900 || mese < 1 || mese > 12 || giorno < 1 || giorno > giorniDelMese[mese - 1])
			System.out.println("Data illegale.");
	}
	
	private int[] getGiorniDelMese () {
		int[] giorniDelMese = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		if (bisestile(anno))
			giorniDelMese[1] = 29;
		
		return giorniDelMese;
	}

	public Data (int g, int m, int a) {
		giorno = g;
		mese = m;
		anno = a;
		controllaData();
	}
	
	public Data (int g, int m) {
		this(g, m, 2008);
	}
	
	public Data (int g) {
		this(g, 1, 2008);		// sarebbe stato valido anche this(g, 1);
	}
	
	public Data () {
		this(13, 1, 1973);
	}
	
	public String toString () {
		return giorno + " " + mesi[mese - 1] + " " + anno;
	}
	
	public boolean precede (Data altra) {
		return this.passatiDallInizio() < altra.passatiDallInizio();
	}
	
	public int passatiDallInizio () {
		int risultato = passatiDallInizioDellAnno();
		for (int pos = 1900; pos < anno - 1; pos++)
			risultato += bisestile(pos) ? 366 : 365;
		
		return risultato;
	}
	
	public int passatiDallInizioDellAnno () {
		int risultato = giorno;

		// aggiungo i giorni dei mesi precedenti
		int[] giorniDelMese = getGiorniDelMese();
		for (int pos = 0; pos < mese - 1; pos++)
			risultato += giorniDelMese[pos];
		
		return risultato;	
	}
}

Per ogni dubbio, non esitate a commentare!



  1. No trackbacks yet.

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>