|
|
|
@ -1,74 +1,46 @@
|
|
|
|
|
package eu.dnetlib.ariadneplus.reader.utils;
|
|
|
|
|
|
|
|
|
|
import com.github.sisyphsu.dateparser.DateParser;
|
|
|
|
|
import com.github.sisyphsu.dateparser.DateParserUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.time.Year;
|
|
|
|
|
import java.time.ZoneId;
|
|
|
|
|
import java.time.ZonedDateTime;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.time.format.DateTimeFormatterBuilder;
|
|
|
|
|
import java.time.format.DateTimeParseException;
|
|
|
|
|
import java.time.format.TextStyle;
|
|
|
|
|
import java.time.temporal.ChronoField;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
|
|
public class ESUtils {
|
|
|
|
|
private static DateTimeFormatter originalRecordDateFormatter = DateTimeFormatter.ofPattern("dd MMM yyyy");
|
|
|
|
|
private static DateTimeFormatter elasticSearchDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
private static DateTimeFormatter fastCatDateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
|
|
|
|
|
|
|
|
|
|
private static ZoneId preferredZone = ZoneId.of("Europe/London");
|
|
|
|
|
private static DateTimeFormatter BST_FORMATTER = new DateTimeFormatterBuilder()
|
|
|
|
|
.appendPattern("EEE MMM dd HH:mm:ss ")
|
|
|
|
|
.appendZoneText(TextStyle.SHORT, Collections.singleton(preferredZone))
|
|
|
|
|
.appendPattern(" yyyy")
|
|
|
|
|
.toFormatter(Locale.ROOT);
|
|
|
|
|
private static DateTimeFormatter yearOnlyDateFormatter = new DateTimeFormatterBuilder()
|
|
|
|
|
.appendPattern("yyyy").toFormatter();
|
|
|
|
|
private static String elasticSearchDateFormat = "yyyy-MM-dd";
|
|
|
|
|
|
|
|
|
|
private static DateTimeFormatter stringMonthDateFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
|
|
|
|
|
|
|
|
|
|
public static String getESFormatDate(String originalDate) {
|
|
|
|
|
try{
|
|
|
|
|
LocalDate parsedDate = LocalDate.parse(originalDate, elasticSearchDateFormatter);
|
|
|
|
|
return parsedDate.format(elasticSearchDateFormatter);
|
|
|
|
|
} catch(Exception e){
|
|
|
|
|
public static String getESFormatDate(String originalDate) {
|
|
|
|
|
if (StringUtils.isBlank(originalDate)) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
String inputDate = originalDate.trim();
|
|
|
|
|
// the library completes with 01-01 if we hae only the year: we do not want that.
|
|
|
|
|
if(inputDate.length() == 4 && StringUtils.isNumeric(inputDate)){
|
|
|
|
|
return inputDate;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
Year year = Year.parse(originalDate);
|
|
|
|
|
return year.format(yearOnlyDateFormatter);
|
|
|
|
|
} catch (Exception e0) {
|
|
|
|
|
try {
|
|
|
|
|
LocalDate parsedDate = LocalDate.parse(originalDate, originalRecordDateFormatter);
|
|
|
|
|
return parsedDate.format(elasticSearchDateFormatter);
|
|
|
|
|
} catch (Exception e1) {
|
|
|
|
|
try {
|
|
|
|
|
LocalDate parsedDate = LocalDate.parse(originalDate.substring(0, 10), elasticSearchDateFormatter);
|
|
|
|
|
return parsedDate.format(elasticSearchDateFormatter);
|
|
|
|
|
} catch (Exception e2) {
|
|
|
|
|
try {
|
|
|
|
|
return parseBST(originalDate);
|
|
|
|
|
} catch (Exception e3) {
|
|
|
|
|
try {
|
|
|
|
|
LocalDate parsedDate = LocalDate.parse(originalDate, fastCatDateFormatter);
|
|
|
|
|
return parsedDate.format(elasticSearchDateFormatter);
|
|
|
|
|
} catch (Exception e4) {
|
|
|
|
|
try {
|
|
|
|
|
LocalDate parsedDate = LocalDate.parse(originalDate, stringMonthDateFormatter);
|
|
|
|
|
return parsedDate.format(elasticSearchDateFormatter);
|
|
|
|
|
} catch (Exception e5) {
|
|
|
|
|
return "0000";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
final LocalDate date = DateParserUtils
|
|
|
|
|
.parseDate(inputDate.trim())
|
|
|
|
|
.toInstant()
|
|
|
|
|
.atZone(ZoneId.systemDefault())
|
|
|
|
|
.toLocalDate();
|
|
|
|
|
return DateTimeFormatter.ofPattern(elasticSearchDateFormat).format(date);
|
|
|
|
|
} catch (DateTimeParseException e) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static String parseBST(String BSTDate) {
|
|
|
|
|
ZonedDateTime zd = ZonedDateTime.parse(BSTDate, BST_FORMATTER);
|
|
|
|
|
return zd.format(elasticSearchDateFormatter);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static String bytesToHex(byte[] hash) {
|
|
|
|
|
StringBuilder hexString = new StringBuilder(2 * hash.length);
|
|
|
|
|