Files
bflows-bandi-be/src/main/java/net/gepafin/tendermanagement/util/DateTimeUtil.java
2024-10-01 18:05:35 +05:30

90 lines
3.1 KiB
Java

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);
}
}