Programmazione:Java/iCal4j
La libreria iCal4J permette di gestire i calendari secondo la RFC 2445.
Puoi scaricare la versione aggiornata della libreria da qui.
Quello che segue è un esempio di come verificare quali date appartengono ad un set previsto dalle regole FREQ:
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import net.fortuna.ical4j.model.DateList;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.NumberList;
import net.fortuna.ical4j.model.Recur;
import net.fortuna.ical4j.model.WeekDayList;
import net.fortuna.ical4j.model.parameter.Value;
import net.fortuna.ical4j.util.TimeZones;
public class test_iCal4j {
/**
* @param args
*/
public static void main(String[] args) {
// String srcRule = "FREQ=YEARLY;BYMONTH=4;BYDAY=SU;BYSETPOS=3"; // Evento annuale, nel mese di aprile, la 3a domenica del mese
// String srcRule = "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"; // Evento settimanale, dal lunedì al venerdì
String srcRule = "FREQ=MONTHLY;BYMONTHDAY=-1"; // Evento mensile: ultimo giorno del mese
// String srcRule = "FREQ=WEEKLY;BYDAY=MO;INTERVAL=2"; // Evento bimensile: ogni lunedì
try {
// Istanzia l'oggetto per il parse delle recursioni
Recur r = new Recur(srcRule);
System.out.println(r.getFrequency()); // Visualizza la frequenza
WeekDayList wList = r.getDayList(); // Estrae l'elenco dei giorni
System.out.println(wList);
NumberList nList = r.getMonthDayList(); // Il giorno del mese (1 = primo del mese, -1 = ultimo del mese)
System.out.println(nList);
// Data di inizio periodo
Calendar queryStartDate = new
GregorianCalendar(TimeZone.getTimeZone(TimeZones.UTC_ID));
queryStartDate.set(2012, Calendar.FEBRUARY, 1, 0,
0, 0);
// Data di fine periodo
Calendar queryEndDate = new
GregorianCalendar(TimeZone.getTimeZone(TimeZones.UTC_ID));
queryEndDate.set(2012, Calendar.MAY, 31, 23,
59, 0);
//
// Questa chiamata estrae l'elenco delle date nel periodo compatibili con la regola di recursione imposta
// dateList2 viene valorizzato con le date valide
DateList dateList2 = r.getDates(new DateTime(queryStartDate.getTime())
, new DateTime(queryEndDate.getTime())
, Value.DATE);
System.out.println(dateList2);
} catch (ParseException e) {
System.out.println("ERRORE!! Parsing della stringa [" + srcRule + "]");
e.printStackTrace();
}
}
}