Last active
November 28, 2018 21:13
-
-
Save jesusbmx/47e637c62294d9507a4be1de19702ef0 to your computer and use it in GitHub Desktop.
Utilitarias para fechas en Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.text.SimpleDateFormat; | |
import java.util.Date; | |
import java.util.concurrent.TimeUnit; | |
public class DateUtil { | |
/** Objeto para formatear y analizar las fechas. */ | |
private static final SimpleDateFormat DATE_FORMAT = | |
new SimpleDateFormat("EEEE, dd/MMMM/yyyy, hh:mm:ss aa"); | |
/** | |
* Obtiene una cadena con la fecha formateada | |
* | |
* @param format formato <code>"yyyy-mm-dd"</code> | |
* @param d fecha | |
* @return cadena <code>"2018-11-25"</code> | |
*/ | |
public static String date(String format, Date d) { | |
if (!Util.isEmpty(format)) DATE_FORMAT.applyLocalizedPattern(format); | |
return (d == null) ? "" : DATE_FORMAT.format(d); | |
} | |
public static String date(String format) { | |
return date(format, new Date()); | |
} | |
public static String date() { | |
return date(null); | |
} | |
/** | |
* Función que nos devuelve el número de días, horas o minutos, entre dos | |
* fechas que se le pasa como parámetros. | |
* | |
* Las fechas que se pasan como parámetros son objetos de la clase | |
* java.util.Date. | |
* | |
* El método getTime() (public long getTime()) devuelve el número de | |
* milisegundos que han pasado desde el 1 de enero de 1970 00:00:00 GMT. | |
* | |
* @param startTime fecha inicial | |
* @param endTime fecha final | |
* @param timeUnit unidad | |
* @return el número de días, horas o minutos | |
*/ | |
public static long difference(long startTime, long endTime, TimeUnit timeUnit) { | |
long diffTime = endTime - startTime; | |
return timeUnit.convert(diffTime, TimeUnit.MILLISECONDS); | |
} | |
public static long difference(Date start, Date end, TimeUnit timeUnit) { | |
return difference(start.getTime(), end.getTime(), timeUnit); | |
} | |
public static long difference(Calendar start, Calendar end, TimeUnit timeUnit) { | |
return difference(start.getTime(), end.getTime(), timeUnit); | |
} | |
public static long differenceOfDays(long start, long end) { | |
return difference(start, end, TimeUnit.DAYS); | |
} | |
public static long differenceOfDays(Date start, Date end) { | |
return difference(start, end, TimeUnit.DAYS); | |
} | |
public static long differenceOfDays(Calendar start, Calendar end) { | |
return difference(start, end, TimeUnit.DAYS); | |
} | |
public static long differenceOfHours(long start, long end) { | |
return difference(start, end, TimeUnit.HOURS); | |
} | |
public static long differenceOfHours(Date start, Date end) { | |
// long startTime = start.getTime(); | |
// long endTime = end.getTime(); | |
// long diffTime = endTime - startTime; | |
// long diffDays = diffTime / (1000 * 60 * 60 * 24); | |
// return diffDays; | |
return difference(start, end, TimeUnit.HOURS); | |
} | |
public static long differenceOfMinutes(long start, long end) { | |
return difference(start, end, TimeUnit.MINUTES); | |
} | |
public static long differenceOfMinutes(Date start, Date end) { | |
return difference(start, end, TimeUnit.MINUTES); | |
} | |
public static long differenceOfMinutes(Calendar start, Calendar end) { | |
return difference(start, end, TimeUnit.MINUTES); | |
} | |
/** | |
* Obtiene una lista de meses segun el rango. | |
* | |
* @param _inicio fecha inicial '2018-10-25' | |
* @param _fin fecha final '2018-12-10' | |
* | |
* @return [2018-10-01, 2018-11-01, 2018-12-01] | |
*/ | |
public static List<Calendar> monthsOf(Date _inicio, Date _fin) { | |
List<Calendar> array = new ArrayList<>(); | |
Calendar inicio = Calendar.getInstance(); | |
inicio.setTime(_inicio); | |
inicio.set(Calendar.DAY_OF_MONTH, 1); | |
Calendar fin = Calendar.getInstance(); | |
fin.setTime(_fin); | |
fin.set(Calendar.DAY_OF_MONTH, 1); | |
int difA = fin.get(Calendar.YEAR) - inicio.get(Calendar.YEAR); | |
int difM = difA * 12 + fin.get(Calendar.MONTH) - inicio.get(Calendar.MONTH); | |
for (int i = 0; i <= difM; i++) { | |
Calendar calendar = Calendar.getInstance(); | |
calendar.setTime(inicio.getTime()); | |
calendar.add(Calendar.MONTH, i); | |
array.add(calendar); | |
} | |
return array; | |
} | |
public static List<Calendar> monthsOf(Calendar inicio, Calendar fin) { | |
return monthsOf(inicio.getTime(), fin.getTime()); | |
} | |
public static void main(String[] args) { | |
System.out.println(date()); | |
System.out.println(date("yyyy-mm-dd, hh:mm:ss")); | |
System.out.println(date()); | |
System.out.println("\nCalcular diferencia fechas:"); | |
Date start = new Date(1533573703280L); | |
Date end = new Date(); | |
System.out.println("start : " + date("yyyy-mm-dd, hh:mm:ss", start)); | |
System.out.println("end : " + date("yyyy-mm-dd, hh:mm:ss", end)); | |
System.out.println("minutes : " + (long) differenceOfMinutes(start, end)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment