All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.ght1pc9kc.juery.basic.utils.TemporalUtils Maven / Gradle / Ivy

There is a newer version: 1.4.2
Show newest version
package fr.ght1pc9kc.juery.basic.utils;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;

public final class TemporalUtils {
    public static boolean isCreatable(String datetime) {
        ManagedTemporal temporal = detectCreatable(datetime);
        if (temporal != null) {
            try {
                temporal.getParser().parseBest(datetime,
                        LocalDateTime::from, LocalDate::from, Instant::from);
                return true;
            } catch (Exception ignore) {
                // Do nothing, just return false
            }
        }
        return false;
    }

    @SuppressWarnings({"UnnecessaryContinue", "squid:S3776", "squid:S3626"})
    private static ManagedTemporal detectCreatable(String date) {
        boolean hasTime = false;
        boolean hasDate = false;
        for (char c : date.toCharArray()) {
            if (c == 90 /*Z*/ || c == 122 /*z*/) {
                if (hasDate && hasTime) return ManagedTemporal.INSTANT;
                else return null;
            } else if ((c >= 48 && c <= 58) || c == 46 /*.*/) continue;
            else if (c == 45 /*-*/) hasDate = true;
            else if (c == 84 /*T*/ || c == 116 /*t*/) hasTime = true;
            else return null;
        }
        if (hasDate && hasTime) return ManagedTemporal.LOCAL_DATE_TIME;
        else if (hasDate) return ManagedTemporal.LOCAL_DATE;
        else return null;
    }

    public static TemporalAccessor create(String datetime) {
        ManagedTemporal managedTemporal = detectCreatable(datetime);
        if (managedTemporal == null) {
            throw new IllegalArgumentException("Not a managed temporal !");
        }

        return managedTemporal.getParser().parseBest(datetime,
                LocalDateTime::from, LocalDate::from, Instant::from);
    }

    private enum ManagedTemporal {
        LOCAL_DATE_TIME(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
        LOCAL_DATE(DateTimeFormatter.ISO_LOCAL_DATE),
        INSTANT(DateTimeFormatter.ISO_INSTANT);

        private final DateTimeFormatter formatter;

        ManagedTemporal(DateTimeFormatter formatter) {
            this.formatter = formatter;
        }

        public DateTimeFormatter getParser() {
            return formatter;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy