Files
bflows-bandi-be/src/main/java/net/gepafin/tendermanagement/util/DateTimeUtil.java
2025-05-26 17:17:41 +05:30

138 lines
4.9 KiB
Java

package net.gepafin.tendermanagement.util;
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.time.LocalDate;
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("Europe/Rome")).toLocalDateTime();
return localDatetime;
}
public static LocalTime LocalTimeServerToEurope(LocalTime systemTime) {
ZonedDateTime zonedDateTime = systemTime.atDate(LocalDate.now()).atZone(ZoneId.systemDefault());
return zonedDateTime.withZoneSameInstant(ZoneId.of("Europe/Rome")).toLocalTime();
}
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);
}
public static String formatLocalDateTime(LocalDateTime dateTime, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return dateTime.format(formatter);
}
public static LocalDateTime parseStringToLocalDateTime(String dateTimeStr, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(dateTimeStr, formatter);
}
public static LocalDateTime parseStringToLocalDateTime(String dateStr) {
if (dateStr == null || dateStr.isEmpty()) return null;
try {
return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
} catch (Exception e) {
try {
return LocalDateTime.parse(dateStr, DateTimeFormatter.ISO_DATE_TIME); // fallback
} catch (Exception ignored) {
}
}
return null;
}
public static String parseLocalTimeToString(LocalTime time, String format) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return time.format(formatter);
}
// Method 2: Convert String and format to LocalTime
public static LocalTime parseStringToLocalTime(String timeString, String format) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return LocalTime.parse(timeString, formatter);
} catch (DateTimeParseException e) {
System.out.println("Invalid time format: " + e.getMessage());
return null;
}
}
public static String formatCreatedDate(LocalDateTime createdDate) {
if (createdDate == null) {
return "";
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
return createdDate.format(formatter);
}
}