/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.utilerias; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Set; import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.lang.StringUtils; public final class DateUtil { public static Integer DIA = Integer.valueOf(1000 * 60 * 60 * 24); public static Integer UM_DIA = Integer.valueOf(1); /** * Formato 24Hs */ public static String ddMMaaHH24mm = "dd/MM/yyyy HH:mm"; /** * Formato 12hs */ public static String ddMMaaHHmm = "dd/MM/yyyy hh:mm"; public static String ddMMaa = "dd/MM/yyyy"; public static String ddMMaa_anodoisdigitos = "dd/MM/yy"; public static String ddMMaa_sembarra = "ddMMyy"; public static String HHmm = "HH:mm"; public static String formatGMT = "yyyy-MM-dd'T'HH:mm:ss"; public static String formatJson = "yyyy-MM-dd'T'HH:mm:ss.SSS"; public static String formatExp = "yyyyMMdd"; /** * No need for an instance */ private DateUtil() { } /** * Elapsed days based on current time * * @param date * Date * * @return int number of days */ public static int getElapsedDias(Date date) { return elapsed(date, Calendar.DATE); } /** * Elapsed days based on two Date objects * * @param d1 * Date * @param d2 * Date * * @return int number of days */ public static int getElapsedDias(Date d1, Date d2) { return elapsed(d1, d2, Calendar.DATE); } /** * Elapsed months based on current time * * @param date * Date * * @return int number of months */ public static int getElapsedMeses(Date date) { return elapsed(date, Calendar.MONTH); } /** * Elapsed months based on two Date objects * * @param d1 * Date * @param d2 * Date * * @return int number of months */ public static int getElapsedMeses(Date d1, Date d2) { return elapsed(d1, d2, Calendar.MONTH); } /** * Elapsed years based on current time * * @param date * Date * * @return int number of years */ public static int getElapsedAnos(Date date) { return elapsed(date, Calendar.YEAR); } /** * Elapsed years based on two Date objects * * @param d1 * Date * @param d2 * Date * * @return int number of years */ public static int getElapsedAnos(Date d1, Date d2) { return elapsed(d1, d2, Calendar.YEAR); } /** * All elaspsed types * * @param g1 * GregorianCalendar * @param g2 * GregorianCalendar * @param type * int (Calendar.FIELD_NAME) * * @return int number of elapsed "type" */ private static int elapsed(GregorianCalendar g1, GregorianCalendar g2, int type) { GregorianCalendar gc1, gc2; int elapsed = 0; // Create copies since we will be clearing/adding if (g2.after(g1)) { gc2 = (GregorianCalendar) g2.clone(); gc1 = (GregorianCalendar) g1.clone(); } else { gc2 = (GregorianCalendar) g1.clone(); gc1 = (GregorianCalendar) g2.clone(); } if (type == Calendar.MONTH || type == Calendar.YEAR) { gc1.clear(Calendar.DATE); gc2.clear(Calendar.DATE); } if (type == Calendar.YEAR) { gc1.clear(Calendar.MONTH); gc2.clear(Calendar.MONTH); } while (gc1.before(gc2)) { gc1.add(type, 1); elapsed++; } return elapsed; } /** * All elaspsed types based on date and current Date * * @param date * Date * @param type * int (Calendar.FIELD_NAME) * * @return int number of elapsed "type" */ private static int elapsed(Date date, int type) { return elapsed(date, new Date(), type); } /** * All elaspsed types * * @param d1 * Date * @param d2 * Date * @param type * int (Calendar.FIELD_NAME) * * @return int number of elapsed "type" */ private static int elapsed(Date d1, Date d2, int type) { Calendar cal = Calendar.getInstance(); cal.setTime(d1); GregorianCalendar g1 = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE)); cal.setTime(d2); GregorianCalendar g2 = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE)); return elapsed(g1, g2, type); } public static Date getDateFromString(String data, String formato) throws java.text.ParseException { Date d = new Date(); DateFormat df = new SimpleDateFormat(formato); d = df.parse(data); return d; } public static int compareDate(java.util.Date d1) { return compareDate(d1, new java.util.Date()); } /** * Compara a data atual com d1 de forma que a chama fica compareOnlyDate(d1, new java.util.Date()); * * {@link #compareOnlyDate(Date, Date)} */ public static int compareOnlyDate(java.util.Date d1) { return compareOnlyDate(d1, new java.util.Date()); } /** * Não leva em consideração os segundos/minutos. Só é considerado o dia/mes/ano
* * Retorno igual a {@link #compareDate(Date, Date)} */ public static int compareOnlyDate(java.util.Date d1, java.util.Date d2) { java.util.Calendar cal = Calendar.getInstance(); cal.setTime(d1); GregorianCalendar g1 = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE)); java.util.Calendar cal2 = Calendar.getInstance(); cal2.setTime(d2); GregorianCalendar g2 = new GregorianCalendar(cal2.get(Calendar.YEAR), cal2.get(Calendar.MONTH), cal2.get(Calendar.DATE)); return g1.compareTo(g2); // return cal.compareTo(cal2); } /** * Retorna : - 0 se igual
* - < 0 se d1 < d2
* - > 0 se d1 > d2
*/ public static int compareDate(java.util.Date d1, java.util.Date d2) { java.util.Calendar cal = Calendar.getInstance(); cal.setTime(d1); java.util.Calendar cal2 = Calendar.getInstance(); cal2.setTime(d2); return cal.compareTo(cal2); } public static Integer getIntegerDate(java.util.Date d, String formato) { if (formato.contains("/")) { throw new IllegalArgumentException("O formato não deve conter o simbolo \\ "); } String s = getStringDate(d, formato); return Integer.parseInt(s); } public static String getStringDate(java.util.Date d, String formato) { if (d != null) { DateFormat df = new SimpleDateFormat(formato); return df.format(d); } return null; } /** * Formato 12 horas * @param d * @return */ public static String getStringDateHour(java.util.Date d) { if (d != null) { DateFormat df = new SimpleDateFormat(ddMMaaHHmm); return df.format(d); } return null; } /** * Formato 24 horas * @param d * @return */ public static String getStringDate24Hour(java.util.Date d) { if (d != null) { DateFormat df = new SimpleDateFormat(ddMMaaHH24mm); return df.format(d); } return null; } public static String getStringDate(java.util.Date d) { return getStringDate(d, "dd/MM/yyyy"); } public static String getStringDate(java.sql.Date d) { return getStringDate(new java.util.Date(d.getTime())); } public static String getStringCurrentDate(String formato) { return getStringDate(new java.util.Date(), formato); } public static String changeFormatStringDate(String date, String currentFormat, String newFormat) { try { return DateUtil.getStringDate(DateUtil.getDateFromString(date, currentFormat), newFormat); } catch (ParseException ex) { Logger.getLogger(DateUtil.class.getName()).log(Level.SEVERE, null, ex); } return null; } public static Integer changeFormatIntDate(Integer date, String currentFormat, String newFormat) { try { return DateUtil.getIntegerDate(DateUtil.getDateFromString(String.valueOf(date), currentFormat), newFormat); } catch (ParseException ex) { Logger.getLogger(DateUtil.class.getName()).log(Level.SEVERE, null, ex); } return null; } /** * Retorna uma array onde [0] é hora, [1] é minuto * * @param hora * @return */ private static int[] getArrayHora(Integer hora) { String strHora = String.valueOf(hora); int[] array = new int[2]; if (strHora.length() <= 2) { array[0] = 0; array[1] = Integer.parseInt(strHora); } else if (strHora.length() == 3) { array[0] = Integer.parseInt(strHora.substring(0, 1)); array[1] = Integer.parseInt(strHora.substring(1)); } else if (strHora.length() == 4) { array[0] = Integer.parseInt(strHora.substring(0, 2)); array[1] = Integer.parseInt(strHora.substring(2)); } return array; } public static java.util.Date changeFormatIntDate(Integer date, String currentFormat, Integer hora) { try { if (currentFormat.equals("yMMdd") || currentFormat.equals("yyMMdd")) { currentFormat = "yyyyMMdd"; String strData = String.valueOf(date); if (strData.length() == 5) { strData = "200" + strData; } else if (strData.length() == 6) { strData = "20" + strData; } date = Integer.parseInt(strData); } Date data = DateUtil.getDateFromString(String.valueOf(date), currentFormat); if (hora == null) { return data; } int horaArray[] = DateUtil.getArrayHora(hora); Calendar c = Calendar.getInstance(); c.setTime(data); c.set(Calendar.HOUR_OF_DAY, horaArray[0]); c.set(Calendar.MINUTE, horaArray[1]); return c.getTime(); } catch (ParseException ex) { Logger.getLogger(DateUtil.class.getName()).log(Level.SEVERE, null, ex); } return null; } public static java.util.Date changeFormatStringDate(String date, String currentFormat, Integer hora) { try { if (currentFormat.equals("yMMdd") || currentFormat.equals("yyMMdd")) { currentFormat = "yyyyMMdd"; if (date.length() == 5) { date = "200" + date; } else if (date.length() == 6) { date = "20" + date; } } Date data = DateUtil.getDateFromString(String.valueOf(date), currentFormat); if (hora == null) { return data; } int horaArray[] = DateUtil.getArrayHora(hora); Calendar c = Calendar.getInstance(); c.setTime(data); c.set(Calendar.HOUR_OF_DAY, horaArray[0]); c.set(Calendar.MINUTE, horaArray[1]); return c.getTime(); } catch (ParseException ex) { Logger.getLogger(DateUtil.class.getName()).log(Level.SEVERE, null, ex); } return null; } public static int getIntHoraSRVP(Date data) { Calendar c = Calendar.getInstance(); c.setTime(data); String hora = String.valueOf(c.get(Calendar.HOUR_OF_DAY)); hora = (hora.length() < 2) ? "0" + hora : hora; String minuto = String.valueOf(c.get(Calendar.MINUTE)); minuto = (minuto.length() < 2) ? "0" + minuto : minuto; return Integer.parseInt(hora + minuto); } public static long getElapsedHoras(Date dtInic, Date dtFim) { return (dtFim.getTime() - dtInic.getTime()) / (1000 * 60 * 60); } public static long getElapsedMinutos(Date dtInic, Date dtFim) { return (dtFim.getTime() - dtInic.getTime()) / (1000 * 60); } /** * Regresa los minutos pela hora inicial del sistema * * @param dtInic * @param dtFim * @return */ public static HoraSistema getHorasMinutosByInicio(Date dtFim) { return new HoraSistema(dtFim); } /** * Verifica se o intervalo de datas dtStartCompare e dtEndCompare estão dentro do intervalo dtStart dtEnd * * @param dtStart * @param dtEnd * @param dtStartCompare * @param dtEndCompare * @return */ public static boolean intersectDate(Date dtStart, Date dtEnd, Date dtStartCompare, Date dtEndCompare) { return TraslaparUtil.intersectDate(dtStart, dtEnd, dtStartCompare, dtEndCompare); } public static void main(String ar[]) { System.out.println(Arrays.asList(1,2,3,4,5).toString().replaceAll("[\\]\\[]", "")); } public static void main2(String args[]) { java.util.Date agora = new java.util.Date(); System.out.println(agora); Calendar c = Calendar.getInstance(); c.setTime(agora); System.out.println(DateUtil.getIntHoraSRVP(agora)); // c.add(Calendar.MINUTE, 60); System.out.println("final " + c.getTime()); System.out.println("1 " + c.get(Calendar.HOUR_OF_DAY)); } /** * Es la fecInicial del sistema para campos de horas * * @return */ public static Calendar getFecInicio() { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 1970); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.MONTH, 0); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.MILLISECOND, 0); c.set(Calendar.SECOND, 0); return c; } /** * Es la fecInicial del sistema con los campos de hora y minutos del parametro informado * * @return */ public static Calendar getFecInicio(Date horaMinuto) { Calendar tmp = Calendar.getInstance(); tmp.setTime(horaMinuto); Calendar c = getFecInicio(); c.set(Calendar.HOUR_OF_DAY, tmp.get(Calendar.HOUR_OF_DAY)); c.set(Calendar.MINUTE, tmp.get(Calendar.MINUTE)); return c; } /** * Es la fecInicial del sistema con los campos de hora y minutos del parametro informado * * @return */ public static Calendar getFecInicio(Integer hora, Integer minuto) { Calendar c = getFecInicio(); c.add(Calendar.HOUR_OF_DAY, hora); c.add(Calendar.MINUTE, minuto); return c; } /** * Quita los segundos y milesegundos de la fecha * * @param fecha * @return */ public static Date normalizar(Date fecha) { GregorianCalendar gcalendar = new GregorianCalendar(); gcalendar.setTime(fecha); gcalendar.set(Calendar.SECOND, 0); gcalendar.set(Calendar.MILLISECOND, 0); return gcalendar.getTime(); } /** * Quita los segundos, milesegundos, hora y minuto de la fecha * * @param fecha * @return */ public static Date normalizarToFecha(Date fecha) { GregorianCalendar gcalendar = new GregorianCalendar(); gcalendar.setTime(fecha); gcalendar.set(Calendar.SECOND, 0); gcalendar.set(Calendar.MILLISECOND, 0); gcalendar.set(Calendar.HOUR_OF_DAY, 0); gcalendar.set(Calendar.MINUTE, 0); return gcalendar.getTime(); } public static Date inicioFechaPeriodoMeses(Date periodo) { return inicioFecha(periodo, true); } public static Date fimFechaPeriodoMeses(Date periodo) { return fimFecha(periodo, true); } private static Date inicioFecha(Date fecha, boolean diaInicial) { GregorianCalendar gcalendar = new GregorianCalendar(); gcalendar.setTime(fecha); int date = gcalendar.get(Calendar.DATE); if (diaInicial) { date = gcalendar.getActualMinimum(Calendar.DAY_OF_MONTH); } int month = gcalendar.get(Calendar.MONTH); int year = gcalendar.get(Calendar.YEAR); int hourOfDay = 00; int minute = 00; int second = 00; gcalendar.set(year, month, date, hourOfDay, minute, second); return gcalendar.getTime(); } private static Date fimFecha(Date fecha, boolean diaFinal) { GregorianCalendar gcalendar = new GregorianCalendar(); gcalendar.setTime(fecha); int date = gcalendar.get(Calendar.DATE); if (diaFinal) { date = gcalendar.getActualMaximum(Calendar.DAY_OF_MONTH); } int month = gcalendar.get(Calendar.MONTH); int year = gcalendar.get(Calendar.YEAR); int hourOfDay = 23; int minute = 59; int second = 59; gcalendar.set(year, month, date, hourOfDay, minute, second); return gcalendar.getTime(); } public static Date inicioFecha(Date fecha) { return inicioFecha(fecha, false); } public static Date fimFecha(Date fecha) { return fimFecha(fecha, false); } public static Date somarDias(Date data, int quantidadeDias) { Integer dias = UM_DIA * quantidadeDias; Calendar c = Calendar.getInstance(); c.setTime(data); c.add(Calendar.DAY_OF_MONTH, dias); return c.getTime(); } public static Date somarMinutos(Date data, int quantidadeMinutos) { Calendar c = Calendar.getInstance(); c.setTime(data); c.add(Calendar.MINUTE, quantidadeMinutos); return c.getTime(); } /** * Formato competencia: MM/YYYY * * @param competencia * @return */ public static Set carregarDiasCompetencia(String competencia, Date dataMovimento) { Set diasCompetencia = new TreeSet(); if (competencia == null && dataMovimento != null) { Integer diaInteger = new Integer(getStringDate(dataMovimento).split("/")[0]); diasCompetencia.add(diaInteger); } else { String[] vetCompetencia = competencia.split("/"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.MONTH, Integer.valueOf(vetCompetencia[0]) - 1); cal.set(Calendar.YEAR, Integer.valueOf(vetCompetencia[1])); for (int i = 1; i <= cal.getActualMaximum(Calendar.DAY_OF_MONTH); i++) { diasCompetencia.add(i); } } return diasCompetencia; } public static Set carregarDiasCompetencia(Date dataInicial, Date dataFinal) { Set diasCompetencia = new TreeSet(); Calendar cal = Calendar.getInstance(); cal.setTime(dataInicial); Integer diaInicial = cal.get(Calendar.DAY_OF_MONTH); cal.setTime(dataFinal); Integer diaFinal = cal.get(Calendar.DAY_OF_MONTH); for (int i = diaInicial; i <= diaFinal; i++) { diasCompetencia.add(i); } return diasCompetencia; } public static boolean isCompetenciaValida(String competencia) { if (StringUtils.isNotBlank(competencia)) { String mesString = competencia.split("/")[0].replaceAll("_", ""); if (StringUtils.isNotBlank(mesString)) { Integer mes = Integer.valueOf(competencia.split("/")[0]); Integer minMes = Calendar.JANUARY + 1; Integer maxMes = Calendar.DECEMBER + 1; return mes >= minMes && mes <= maxMes; } } return false; } public static Date getDataFinalCompetencia(String competencia) throws ParseException { if (isCompetenciaValida(competencia)) { Date dataInicio = getDateFromString("01/" + competencia, "dd/MM/yyyy"); Calendar cal = Calendar.getInstance(LocaleUtil.getLocale()); cal.setTime(dataInicio); return getDateFromString(cal.getActualMaximum(Calendar.DAY_OF_MONTH) + "/" + competencia, "dd/MM/yyyy"); } return null; } public static Date getDataInicialCompetencia(String competencia) throws ParseException { if (isCompetenciaValida(competencia)) { return getDateFromString("01/" + competencia, "dd/MM/yyyy"); } return null; } public static Date getYesterdayDate() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date yesterday = calendar.getTime(); return yesterday; } public static String getYesterdayDateString() { DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); return dateFormat.format(cal.getTime()); } public static Date getDataTempoDecorrido(String tempo) { String[] tempoDecorrido = tempo.split(":"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR, Integer.parseInt(tempoDecorrido[0].isEmpty() ? "0" : tempoDecorrido[0])); calendar.set(Calendar.MINUTE, Integer.parseInt(tempoDecorrido[1].isEmpty() ? "0" : tempoDecorrido[1])); return calendar.getTime(); } public static int diferencaEntreDatasEmdias(Date inicio, Date fim) { long quantidadeHoras = ((fim.getTime() - inicio.getTime())); return (int) (quantidadeHoras / DIA); } }