Page 1 of 1

Byte-Konverter für LocalDateTime Java [geschlossen]

Posted: 20 Jan 2025, 16:14
by Guest
Ich lese eine Parquet-Datei, aber die Datumsfelder werden im Byte-Array-Format zurückgegeben, zum Beispiel [0, 0, 0, 0, 0, 0, 0, 0, 18, -118, 37, 0 ] .
Beim Lesen der Datei hat das Feld das Format org.apache.avro.generic.GenericData$Fixed.
Ich kann es nicht konvertieren LocalDateTime, da das korrekte Datum 2023-08-21 00:00:00 ist und in den Wert 8705-09-28T00:00 konvertiert wird.
Folgender Codeauszug:
InputFile file = HadoopInputFile.fromPath(this.retornaPath(fileName), hadoopConfiguration);
ParquetReader reader = AvroParquetReader.builder(file).build();
GenericRecord record;
while ((record = reader.read()) != null) {
if (fieldValue Instanz von GenericData.Fixed) {
GenericData.Fixed Fixed = (GenericData.Fixed) fieldValue;
byte[] bytes = Fixed.bytes();
LocalDate date = convertInt96ToLocalDate(bytes);
}
public static LocalDate ConvertInt96ToLocalDate(byte[] int96Bytes) {
ByteBuffer buffer = ByteBuffer.wrap(int96Bytes) .order(ByteOrder.LITTLE_ENDIAN);

Code: Select all

    buffer.getLong(); // Avança 8 bytes no buffer

int daysSinceEpoch = buffer.getInt();

return LocalDate.ofEpochDay(daysSinceEpoch);
}