Skip to content

Commit

Permalink
Add 'universal' time converter
Browse files Browse the repository at this point in the history
  • Loading branch information
EverNife committed Jul 18, 2024
1 parent 7ec088b commit 3b57824
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions src/main/java/br/com/finalcraft/evernifecore/util/FCTimeUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import br.com.finalcraft.evernifecore.config.settings.ECSettings;
import br.com.finalcraft.evernifecore.time.DayOfToday;

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -117,4 +122,66 @@ private static Long toMillis(long value, String type){
}
}

public static final DateTimeFormatter FORMATTER_DATETIME = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
public static final DateTimeFormatter FORMATTER_DATETIME_ALT = DateTimeFormatter.ofPattern("yyyy/MM/dd'T'HH:mm");
public static final DateTimeFormatter FORMATTER_DATETIME_REVERSE = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
public static final DateTimeFormatter FORMATTER_DATETIME_REVERSE_COMPLETE = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
public static final DateTimeFormatter FORMATTER_DATE = DateTimeFormatter.ofPattern("yyyy/MM/dd");
public static final DateTimeFormatter FORMATTER_DATE_ALT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static final DateTimeFormatter FORMATTER_DATE_REVERSE = DateTimeFormatter.ofPattern("dd/MM/yyyy");
public static final DateTimeFormatter FORMATTER_DATE_REVERSE_ALT = DateTimeFormatter.ofPattern("dd-MM-yyyy");

/**
* Given a date string, converts to LocalDateTime.
*
* The idea if to convert the most usual timeframes
*
* Accepted TimeFrames patterns are:
* - yyyy-MM-dd'T'HH:mm
* - yyyy/MM/dd'T'HH:mm
* - dd/MM/yyyy HH:mm
* - dd/MM/yyyy HH:mm:ss
* - yyyy/MM/dd
* - yyyy-MM-dd
* - dd/MM/yyyy
* - dd-MM-yyyy
*
* @param dateString
* @return LocalDateTime
*/
public static LocalDateTime universalDateConverter(String dateString) {
if (dateString == null || dateString.isEmpty()){
return null;
}

try {
if (dateString.length() <= 10){//Quando em formato menor, não temos as horas inclusas
if (dateString.charAt(4) == '/') return LocalDate.parse(dateString, FORMATTER_DATE).atTime(LocalTime.MIN);
if (dateString.charAt(4) == '-') return LocalDate.parse(dateString, FORMATTER_DATE_ALT).atTime(LocalTime.MIN);
if (dateString.charAt(2) == '/') return LocalDate.parse(dateString, FORMATTER_DATE_REVERSE).atTime(LocalTime.MIN);
if (dateString.charAt(2) == '-') return LocalDate.parse(dateString, FORMATTER_DATE_REVERSE_ALT).atTime(LocalTime.MIN);
}

if (dateString.length() == 27){
return Timestamp.valueOf(dateString).toLocalDateTime();
}

//Testar formato convencional yyyy-MM-dd'T'HH:mm
if (dateString.charAt(4) == '/'){
return LocalDateTime.parse(dateString, FORMATTER_DATETIME_ALT);
}else if (dateString.charAt(2) == '/'){
if (dateString.length() <= 16){
return LocalDateTime.parse(dateString, FORMATTER_DATETIME_REVERSE);
}else {
return LocalDateTime.parse(dateString, FORMATTER_DATETIME_REVERSE_COMPLETE);
}
}else {
return LocalDateTime.parse(dateString, FORMATTER_DATETIME);
}

}catch (Exception ignored){
return null;
}
}

}

0 comments on commit 3b57824

Please sign in to comment.