Как на Kotlin считывать и записывать дату в hex формате которая начинается с 00 00

Второй день мучаюсь, не могу понять как правильно реализовать функции kotlin для чтения и записи даты из hex в десятичные и обратно.

fun readDOB(): String {
        val day = readInt16()
        val year = readInt16()
        val date = LocalDate.of(year, 1, 1).plusDays(day.toLong())
        return date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))
    }

fun writeDOB(d: String) {
        val date = LocalDate.parse(d, DateTimeFormatter.ofPattern("dd/MM/yyyy"))
        writeInt(IntType.Int16, date.dayOfYear - 1)
        writeInt(IntType.Int16, date.year)
    }

readDOB преобразует дату из hex в стандартный вид 01/01/1900. Также добавляется +1, поскольку в бинарном файле, откуда всё читается, дата начинается с 00 00, а не с 01 00. Поэтому чтобы дата рождения была корректная, добавляется +1.

Задача функции writeDOB состоит в том чтобы вернуть дату в прежний вид hex.

Проблема возникает с датами вроде: 6d 01 e1 07, которая должна быть как 1 января 2018 года, однако при считывании readDOB приходится добавлять не 1, а 2, потому что если добавляется +1, то дата будет 00 00, что недопустимо. поэтому добавлено LocalDate.of(year, 1, 1).plusDays(day.toLong()).

По сути получается так что в некоторых случаях приходится добавлять +2. Все даты корректно отображается после readDOB, проблема возникает именно после обратной записи в бинарный файл, то есть после writeDOB.

Проблема возникает с датами вроде 6d 01 e1 07, которым пришлось добавить +2 и они стали 01 00 e2 07, а после writeDOB становятся 00 00 e2 07, хотя изначально дата была 6d 01 e1 07 и должна быть такой после writeDOB.

Объясните, пожалуйста, в чем проблема и как в этой ситуации быть.

Ниже приведу ещё примеры. сначала дату в оригинале, а напротив дату, которая получается после readDOB и затем writeDOB.

Задача сделать так, чтобы дата отображалось корректно (как и сейчас), но и чтобы она возвращалась в оригинальный вид после writeDOB.

6d 01 e6 07  - 00 00 e7 07 
6d 01 df 07 - 00 00 e0 07
6d 01 db 07 - 00 00 dc 07 
6d 01 e1 07  - 00 00 e2 07 
6d 01 dd 07 - 00 00 de 07 
6d 01 e2 07 - 00 00 e3 07 
6d 01 d1 07 - 00 00 d2 07 

Ответы (0 шт):