private Object toLogicalType()

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);
        }