in src/main/java/com/epam/eco/commons/avro/converter/DefaultAvroConverters.java [101:133]
private Object toLogicalType(Object value, Schema schema) {
if (LogicalTypes.date().equals(schema.getLogicalType())) {
if (value instanceof Date) {
return (int) Instant.ofEpochMilli(((Date) value).getTime())
.atZone(ZoneOffset.systemDefault())
.toLocalDate()
.toEpochDay();
} else if (value instanceof LocalDateTime ldt) {
return this.toLogicalType(ldt.toLocalDate(), schema);
} else if (value instanceof LocalDate) {
return (int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), ((LocalDate) value));
} else if (value instanceof CharSequence) {
return (int) LocalDate.parse((CharSequence) value).toEpochDay();
} else if (value instanceof Integer) {
return value;
}
} else if (LogicalTypes.timeMillis().equals(schema.getLogicalType())) {
if (value instanceof Date) {
Instant instant = Instant.ofEpochMilli(((Date) value).getTime());
return LocalDateTime.ofInstant(instant, ZoneOffset.UTC).toLocalTime().toSecondOfDay();
} else if (value instanceof LocalDateTime ldt) {
return ldt.toLocalTime().toSecondOfDay();
} else if (value instanceof LocalTime) {
return ((LocalTime) value).toSecondOfDay();
} else if (value instanceof CharSequence) {
return LocalTime.parse((CharSequence) value).toSecondOfDay();
} else if (value instanceof Integer) {
return value;
}
}
throw new AvroConversionException(value, schema);
}