Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.List;
- public class FeriadoMovel {
- private enum Desvio {
- CARNAVAL(-47),
- SEXTA_FEIRA_SANTA(-2),
- CORPUS_CHRISTI(60);
- private int desvio;
- private Desvio(int desvio) {
- this.desvio = desvio;
- }
- private int getDesvio() {
- return desvio;
- }
- }
- public static boolean isFeriadoMovel(Date data) {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(data);
- return isFeriadoMovel(calendar);
- }
- public static boolean isFeriadoMovel(Calendar calendar) {
- List<Calendar> feriados = montarListFeriados(calendar);
- return feriados.contains(zerarHoras(calendar));
- }
- private static List<Calendar> montarListFeriados(Calendar calendar) {
- List<Calendar> feriados = new ArrayList<Calendar>();
- Calendar pascoa = pascoa(calendar.get(Calendar.YEAR));
- feriados.add(pascoa);
- feriados.addAll(calcularFeriadosMoveis(pascoa));
- return feriados;
- }
- private static List<Calendar> calcularFeriadosMoveis(Calendar pascoa) {
- List<Calendar> feriados = new ArrayList<Calendar>();
- for (Desvio desvio : Desvio.values()) {
- Calendar feriado = Calendar.getInstance();
- feriado.setTime(pascoa.getTime());
- feriado.add(Calendar.DAY_OF_MONTH, desvio.getDesvio());
- feriados.add(feriado);
- }
- return feriados;
- }
- /**
- * Algoritmo de Meeus / Jones / Butcher
- */
- private static Calendar pascoa(int ano) {
- int a = ano % 19;
- int b = ano / 100;
- int c = ano % 100;
- int d = b / 4;
- int e = b % 4;
- int f = (b + 8) / 25;
- int g = (b - f + 1) / 3;
- int h = (19 * a + b - d - g + 15) % 30;
- int i = c / 4;
- int k = c % 4;
- int l = (32 + 2 * e + 2 * i - h - k) % 7;
- int m = (a + 11 * h + 22 * l) / 451;
- int mes = (h + l - 7 * m + 114) / 31;
- int dia = ((h + l - 7 * m + 114) % 31) + 1;
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.YEAR, ano);
- cal.set(Calendar.MONTH, mes - 1);
- cal.set(Calendar.DAY_OF_MONTH, dia);
- return zerarHoras(cal);
- }
- public static Calendar zerarHoras(Calendar cal) {
- if (cal == null) {
- return null;
- }
- cal.set(Calendar.HOUR_OF_DAY, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- return cal;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment