Skip to content

Instantly share code, notes, and snippets.

@jesusbmx
Last active November 28, 2018 21:13
Show Gist options
  • Save jesusbmx/47e637c62294d9507a4be1de19702ef0 to your computer and use it in GitHub Desktop.
Save jesusbmx/47e637c62294d9507a4be1de19702ef0 to your computer and use it in GitHub Desktop.
Utilitarias para fechas en Java
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