mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-10-10 00:51:30 +00:00
Use thread safe date time formatter
This commit is contained in:
1 file changed
+41
@@ -0,0 +1,41 @@
|
||||
package io.xpipe.app.util;
|
||||
|
||||
import java.text.ParsePosition;
|
||||
import java.time.DateTimeException;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
import java.time.temporal.TemporalQueries;
|
||||
import java.util.Locale;
|
||||
|
||||
public class DateTimeParseHelper {
|
||||
|
||||
private final DateTimeFormatter formatter;
|
||||
|
||||
public DateTimeParseHelper(String pattern) {
|
||||
this(pattern, Locale.US);
|
||||
}
|
||||
|
||||
public DateTimeParseHelper(String pattern, Locale locale) {
|
||||
this.formatter = new DateTimeFormatterBuilder()
|
||||
.parseCaseInsensitive()
|
||||
.parseLenient()
|
||||
.appendPattern(pattern)
|
||||
.toFormatter(locale);
|
||||
}
|
||||
|
||||
public Instant parse(String text) {
|
||||
var parsed = formatter.parse(text, new ParsePosition(0));
|
||||
var date = parsed.query(TemporalQueries.localDate());
|
||||
if (date == null) {
|
||||
throw new DateTimeException("No date found in " + text);
|
||||
}
|
||||
|
||||
var time = parsed.query(TemporalQueries.localTime());
|
||||
return date.atTime(time != null ? time : LocalTime.MIDNIGHT)
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toInstant();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user