package net.gepafin.tendermanagement.util; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.stereotype.Component; import java.io.IOException; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.Calendar; import java.util.Date; import java.util.regex.Pattern; @Component public class DateTimeUtil { private static final Pattern TIME_PATTERN = Pattern.compile( "^((([01]?\\d|2[0-3]):([0-5]\\d)(:[0-5]\\d)?(\\s?[AP]M)?)|((0?[1-9]|1[0-2]):([0-5]\\d)(:[0-5]\\d)?\\s?[AP]M))$"); public static LocalDateTime DateServerToUTC(LocalDateTime systemDate) { ZonedDateTime ldtZoned = systemDate.atZone(ZoneId.systemDefault()); LocalDateTime localDatetime = ldtZoned.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime(); return localDatetime; } public static LocalDateTime getPreviousMonthDate(int month) { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -month); LocalDateTime conv = LocalDateTime.ofInstant(c.getTime().toInstant(), ZoneId.systemDefault()); return conv; } public static Date getDateWithoutTime(LocalDateTime systemDate) { ZonedDateTime zdt = systemDate.atZone(ZoneId.systemDefault()); Date date = Date.from(zdt.toInstant()); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } public static LocalDateTime convertDateToLocalDateTime(Date date) { LocalDateTime ldt = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); return ldt; } public static Date convertLocalDateTimeToDateUsingInstant(LocalDateTime localDateTime) { return Date .from(localDateTime.atZone(ZoneId.systemDefault()) .toInstant()); } public static LocalTime parseTime(String timeString) throws DateTimeParseException { DateTimeFormatter formatter; if(timeString==null) { return null; } if (!TIME_PATTERN.matcher(timeString).matches()) { throw new CustomValidationException(Status.BAD_REQUEST,"Invalid time format: " + timeString); } // Try to parse using default formats if no format is provided String[] defaultFormats = {"HH:mm:ss", "HH:mm", "HH:mm:ss a", "hh:mm a"}; for (String defaultFormat : defaultFormats) { formatter = DateTimeFormatter.ofPattern(defaultFormat); try { return LocalTime.parse(timeString, formatter); } catch (DateTimeParseException e) { // Continue to the next format } } // If all parsing attempts fail, throw an exception throw new CustomValidationException(Status.BAD_REQUEST,"Failed to parse time: " + timeString); } }