ADD - date and time generate methods

This commit is contained in:
atravieso 2025-08-01 15:23:19 -04:00
parent a5e1d71532
commit 418b65bd77
2 changed files with 46 additions and 139 deletions

4
.idea/vcs.xml generated
View File

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings" defaultProject="true" /> <component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project> </project>

View File

@ -1,163 +1,68 @@
package com.banesco.common.infraestructure.helpers; package com.banesco.common.infraestructure.helpers;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.util.HashMap;
import java.util.logging.Level; import java.util.Map;
import java.util.logging.Logger;
/** /**
* Clase utilitaria para operaciones relacionadas con fechas y horas. * Clase de utilidad para operaciones comunes de fecha y hora.
* Proporciona métodos para validar, comparar y calcular períodos entre fechas. * Utiliza el API moderno de Java (java.time).
*/ */
public class DateHelper { public final class DateHelper {
// Define la zona horaria de Venezuela una sola vez.
private static final ZoneId VENEZUELA_ZONE_ID = ZoneId.of("America/Caracas");
private final Logger logger = Logger.getLogger(DateHelper.class.getName()); // Define los formatos de fecha y hora como constantes para reutilizarlos.
private final ZoneId currentZone = ZoneId.of("America/Caracas"); private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private final DateTimeFormatter DATE_YYYY_MM_DD = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
private final DateTimeFormatter TIME_HH_MM_SS = DateTimeFormatter.ofPattern("HH:mm:ss");
private static class SingletonHelper {
private static final DateHelper INSTANCE = new DateHelper();
}
/** /**
* Constructo private to no allow other Instances * Constructor privado para prevenir que la clase sea instanciada.
*/ */
private DateHelper() { private DateHelper() {
// not public instance // Clase de utilidad, no necesita ser instanciada.
} }
/** /**
* Get Instance Singleton * Obtiene la fecha y/o hora actual en la zona horaria de Venezuela.
* *
* @return * @param separate Un flag que indica si se deben devolver la fecha y la hora por separado.
* - Si es `false`, devuelve una sola cadena "yyyy-MM-dd HH:mm:ss".
* - Si es `true`, devuelve un Map con las llaves "date" y "time".
* @return Un objeto (String o Map) con la fecha y hora formateadas.
*/ */
public static DateHelper getInstance() { public static Object getCurrentVenezuelanDateTime(boolean separate) {
return SingletonHelper.INSTANCE; // Obtiene la fecha y hora actual en la zona horaria especificada.
} ZonedDateTime now = ZonedDateTime.now(VENEZUELA_ZONE_ID);
/** if (separate) {
* Permite obtener la Fecha Hora Actual // Devuelve las partes en un mapa
* Map<String, String> dateTimeParts = new HashMap<>();
* @return dateTimeParts.put("date", now.format(DATE_FORMATTER));
*/ dateTimeParts.put("time", now.format(TIME_FORMATTER));
public LocalDateTime getCurrentDateTime() { return dateTimeParts;
return LocalDateTime.now(currentZone); } else {
} // Devuelve una sola cadena de texto combinada
return now.format(DATE_FORMATTER) + " " + now.format(TIME_FORMATTER);
/**
* Permite Obtener la Hora para una FechaHora, en caso de ser null se obtiene la hora actual
*
* @param now Feha Hora Local
* @return
*/
public String getTime(LocalDateTime now) {
if (now == null) {
now = LocalDateTime.now(currentZone);
}
return now.format(TIME_HH_MM_SS);
}
/**
* Permite Obtener la Fecha para una FechaHora, en caso de ser null se obtiene la fecha actual
*
* @param now Feha Hora Local
* @return
*/
public String getDate(LocalDateTime now) {
if (now == null) {
now = LocalDateTime.now(currentZone);
}
return now.format(DATE_YYYY_MM_DD);
}
/**
* Check is Current Hour is in Hour Range passed by parameters
* if Parameters are equal then return false
*
* @param rangeHourBegin Cadena de la hora de inicio del Rango
* @param rangeHourFinish Candena de la hora de fin del Rango
* @param hourStrToCheck Hora en cadena para evaluar si se encuentra entre el rango de parametros
* @return boolean
*/
public boolean isHourInRange(String rangeHourBegin, String rangeHourFinish, String hourStrToCheck) {
return isHourInRange(Integer.parseInt(rangeHourBegin.replace(":", "")),
Integer.parseInt(rangeHourFinish.replace(":", "")),
hourStrToCheck
);
}
/**
* Check is Current Hour is in Hour Range passed by parameters
* if Parameters are equal then return false
*
* @param rangeHourBegin Numero entero de la hora de inicio del Rango
* @param rangeHourFinish Numero entero de la hora de fin del Rango
* @param hourStrToCheck Hora en cadena para evaluar si se encuentra entre el rango de parametros
* @return boolean
*/
public boolean isHourInRange(int rangeHourBegin, int rangeHourFinish, String hourStrToCheck) {
boolean mustValidateService = false;
if (rangeHourBegin == rangeHourFinish) {
return mustValidateService;
}
int currentHour = Integer.parseInt(hourStrToCheck.replace(":", ""));
if (rangeHourBegin > rangeHourFinish) { // hour end is less than hour start, => then validate next day
if (currentHour <= rangeHourFinish || currentHour >= rangeHourBegin) {
mustValidateService = true;
}
} else if (currentHour >= rangeHourBegin && currentHour <= rangeHourFinish) { // Hour the same day
mustValidateService = true;
}
logger.log(Level.INFO, "La hora (%s => %d) %sesta entre %d y %d ".formatted(
hourStrToCheck,
currentHour,
(mustValidateService ? "" : "NO "),
rangeHourBegin,
rangeHourFinish));
return mustValidateService;
}
/**
* Calcula el número de días entre dos fechas.
*
* @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
* @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
* @return El número de días entre las fechas o -1 si ocurre un error al
* procesar las fechas
*/
public long daysBetweenTwoDates(String startDate, String endDate) {
try {
return ChronoUnit.DAYS.between(LocalDate.parse(startDate), LocalDate.parse(endDate));
} catch (DateTimeException dte) {
return -1L;
} }
} }
/** /**
* Verifica si la fecha de inicio es anterior o igual a la fecha de fin. * Función de conveniencia para obtener solo la fecha actual formateada.
* * @return La fecha actual como un String "yyyy-MM-dd".
* @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
* @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
* @return true si startDate es anterior o igual a endDate, false en caso
* contrario
*/ */
public boolean isStartDateBeforeEndDate(String startDate, String endDate) { public static String getCurrentVenezuelanDate() {
return LocalDate.parse(startDate).isBefore(LocalDate.parse(endDate)) return ZonedDateTime.now(VENEZUELA_ZONE_ID).format(DATE_FORMATTER);
|| LocalDate.parse(startDate).isEqual(LocalDate.parse(endDate)); }
/**
* Función de conveniencia para obtener solo la hora actual formateada.
* @return La hora actual como un String "HH:mm:ss".
*/
public static String getCurrentVenezuelanTime() {
return ZonedDateTime.now(VENEZUELA_ZONE_ID).format(TIME_FORMATTER);
} }
} }