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!
No trackbacks yet.