Как на 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