From 418b65bd77bbf76942655e6713554b6d747425e2 Mon Sep 17 00:00:00 2001 From: atravieso Date: Fri, 1 Aug 2025 15:23:19 -0400 Subject: [PATCH] ADD - date and time generate methods --- .idea/vcs.xml | 4 +- .../infraestructure/helpers/DateHelper.java | 181 +++++------------- 2 files changed, 46 insertions(+), 139 deletions(-) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index d843f34..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java index 1ee3e39..116c9ac 100644 --- a/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java +++ b/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java @@ -1,163 +1,68 @@ 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.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; -import java.util.logging.Level; -import java.util.logging.Logger; +import java.util.HashMap; +import java.util.Map; /** - * Clase utilitaria para operaciones relacionadas con fechas y horas. - * Proporciona métodos para validar, comparar y calcular períodos entre fechas. + * Clase de utilidad para operaciones comunes de fecha y hora. + * 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()); - private final ZoneId currentZone = ZoneId.of("America/Caracas"); - private final DateTimeFormatter DATE_YYYY_MM_DD = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private final DateTimeFormatter TIME_HH_MM_SS = DateTimeFormatter.ofPattern("HH:mm:ss"); - - private static class SingletonHelper { - private static final DateHelper INSTANCE = new DateHelper(); - } - + // Define los formatos de fecha y hora como constantes para reutilizarlos. + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss"); /** - * Constructo private to no allow other Instances + * Constructor privado para prevenir que la clase sea instanciada. */ 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() { - return SingletonHelper.INSTANCE; - } + public static Object getCurrentVenezuelanDateTime(boolean separate) { + // Obtiene la fecha y hora actual en la zona horaria especificada. + ZonedDateTime now = ZonedDateTime.now(VENEZUELA_ZONE_ID); - /** - * Permite obtener la Fecha Hora Actual - * - * @return - */ - public LocalDateTime getCurrentDateTime() { - return LocalDateTime.now(currentZone); - } - - /** - * 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; + if (separate) { + // Devuelve las partes en un mapa + Map dateTimeParts = new HashMap<>(); + dateTimeParts.put("date", now.format(DATE_FORMATTER)); + dateTimeParts.put("time", now.format(TIME_FORMATTER)); + return dateTimeParts; + } else { + // Devuelve una sola cadena de texto combinada + return now.format(DATE_FORMATTER) + " " + now.format(TIME_FORMATTER); } } /** - * Verifica si la fecha de inicio es anterior o igual a la fecha de fin. - * - * @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 + * Función de conveniencia para obtener solo la fecha actual formateada. + * @return La fecha actual como un String "yyyy-MM-dd". */ - public boolean isStartDateBeforeEndDate(String startDate, String endDate) { - return LocalDate.parse(startDate).isBefore(LocalDate.parse(endDate)) - || LocalDate.parse(startDate).isEqual(LocalDate.parse(endDate)); + public static String getCurrentVenezuelanDate() { + return ZonedDateTime.now(VENEZUELA_ZONE_ID).format(DATE_FORMATTER); } -} + + /** + * 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); + } +} \ No newline at end of file