90 lines
3.1 KiB
Java
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);
|
|
}
|
|
}
|