Преобразование ДатаВремя из Delphi в Java

Рейтинг: 0Ответов: 1Опубликовано: 06.07.2023

Никак не могу сообразить как можно перевести датавремя из делфи (в виде double) в Java, чтобы привести к виду LocalDateTime Java. Отсчёт в делфи идёт с 1899-12-30 12:00AM (т.е. 00:00 по нашему, спасибо zed за исправление).
Так как можно преобразовать с минимальными расчётами значение и получить читабельный для юзеров результат.

И так, возьмем для примера следующее число:

45070.381944444445

Если с 45070 это понятно, что это 24 мая 2023 года, то 381944444445 остается для меня загадкой, объясните чайнику, пожалуйста.

Ответы

▲ 1Принят

Решение задачи выполняется следующим образом, с использованием нулевого часового пояса.

    //Устанавливаем нулевую дату отсчёта для даты
    LocalDate zeroDate = LocalDate.of(1899, 12, 30);

    //Формула предоставленная @zed (или 86400000 мс)
    long ms = 24 * 60 * 60 * 1000;

    //Дата в формате делфи
    double firstdate = 45070.381944444445;

    //Получаем целевую дату
    LocalDate targetDate = zeroDate.plusDays((int) firstdate);

    //Умножаем оставшуюся без даты разницу на формулу
    double gettime = (firstdate - (int) firstdate) * ms;

    //Получаем время с часовым поясом +00:00
    TimeZone.setDefault(TimeZone.getTimeZone("0"));
    Time time = new Time((long) gettime);

    //Преобразовываем в формат ДатаВремя
    LocalDateTime localDateTime = targetDate.atTime(time.toLocalTime());

Вывод получаем в виде 2023-05-24T09:10.
Естественно всё можно упростить, все расписал для большей наглядности решения.