Guest User

FeriadoMovel

a guest
Jun 25th, 2013
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.29 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.List;
  5.  
  6. public class FeriadoMovel {
  7.  
  8.     private enum Desvio {
  9.         CARNAVAL(-47),
  10.         SEXTA_FEIRA_SANTA(-2),
  11.         CORPUS_CHRISTI(60);
  12.  
  13.         private int desvio;
  14.  
  15.         private Desvio(int desvio) {
  16.             this.desvio = desvio;
  17.         }
  18.  
  19.         private int getDesvio() {
  20.             return desvio;
  21.         }
  22.     }
  23.  
  24.     public static boolean isFeriadoMovel(Date data) {
  25.         Calendar calendar = Calendar.getInstance();
  26.         calendar.setTime(data);
  27.         return isFeriadoMovel(calendar);
  28.     }
  29.  
  30.     public static boolean isFeriadoMovel(Calendar calendar) {
  31.         List<Calendar> feriados = montarListFeriados(calendar);
  32.         return feriados.contains(zerarHoras(calendar));
  33.     }
  34.  
  35.     private static List<Calendar> montarListFeriados(Calendar calendar) {
  36.         List<Calendar> feriados = new ArrayList<Calendar>();
  37.         Calendar pascoa = pascoa(calendar.get(Calendar.YEAR));
  38.         feriados.add(pascoa);
  39.         feriados.addAll(calcularFeriadosMoveis(pascoa));
  40.         return feriados;
  41.     }
  42.  
  43.     private static List<Calendar> calcularFeriadosMoveis(Calendar pascoa) {
  44.         List<Calendar> feriados = new ArrayList<Calendar>();
  45.         for (Desvio desvio : Desvio.values()) {
  46.             Calendar feriado = Calendar.getInstance();
  47.             feriado.setTime(pascoa.getTime());
  48.             feriado.add(Calendar.DAY_OF_MONTH, desvio.getDesvio());
  49.             feriados.add(feriado);
  50.         }
  51.         return feriados;
  52.     }
  53.  
  54.     /**
  55.      * Algoritmo de Meeus / Jones / Butcher
  56.      */
  57.     private static Calendar pascoa(int ano) {
  58.         int a = ano % 19;
  59.         int b = ano / 100;
  60.         int c = ano % 100;
  61.         int d = b / 4;
  62.         int e = b % 4;
  63.         int f = (b + 8) / 25;
  64.         int g = (b - f + 1) / 3;
  65.         int h = (19 * a + b - d - g + 15) % 30;
  66.         int i = c / 4;
  67.         int k = c % 4;
  68.         int l = (32 + 2 * e + 2 * i - h - k) % 7;
  69.         int m = (a + 11 * h + 22 * l) / 451;
  70.         int mes = (h + l - 7 * m + 114) / 31;
  71.         int dia = ((h + l - 7 * m + 114) % 31) + 1;
  72.  
  73.         Calendar cal = Calendar.getInstance();
  74.         cal.set(Calendar.YEAR, ano);
  75.         cal.set(Calendar.MONTH, mes - 1);
  76.         cal.set(Calendar.DAY_OF_MONTH, dia);
  77.  
  78.         return zerarHoras(cal);
  79.     }
  80.  
  81.     public static Calendar zerarHoras(Calendar cal) {
  82.         if (cal == null) {
  83.             return null;
  84.         }
  85.         cal.set(Calendar.HOUR_OF_DAY, 0);
  86.         cal.set(Calendar.MINUTE, 0);
  87.         cal.set(Calendar.SECOND, 0);
  88.         cal.set(Calendar.MILLISECOND, 0);
  89.         return cal;
  90.     }
  91.  
  92. }
Advertisement
Add Comment
Please, Sign In to add comment