Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Как перевести дату и время из Date в секунды от рождества Христова в Java?

#java #дата #localdate


Как перевести дату и время из Date в секунды от рождества Христова?

date.getTime() - возвращает от начала UNIX времени.

Нужно например 2018-12-26 11:39:27 перевести в секунды от 01.01.0001 00:00:00

Уточнение:
Корректнее будет использовать не Date, а Timestamp 
Есть сервис которому нужно передать дату и время в секундах. Этот сервис следующим
методом воспроизводит из секунд обратно в дату и время:

 private String dateConverter(String date) {
            LocalDateTime ldt = LocalDateTime.of(1, Month.JANUARY, 1, 0, 0, 0);
            LocalDateTime resDate = ldt.plusSeconds(Long.parseLong(date));
            return String.valueOf(resDate);
        } 


соответственно дату и время (например 2018-12-26 11:39:27) нужно предварительно перевести
в секунды, с началом исчисления от 01.01.0001 00:00:00 
    


Ответы

Ответ 1



Вот такой код возвращает то, что вам надо: ZonedDateTime localNow = Instant.now().atZone(ZoneOffset.systemDefault()); ZonedDateTime localAtCristsBirth = Instant.parse("0001-01-01T00:00:00.00Z").atZone(ZoneOffset.systemDefault()); Duration timePassed = Duration.between(localAtCristsBirth, localNow); System.out.format("От тождества Христова прошло %d секунд\n", timePassed.getSeconds() ); Уточнение в ответ на уточнение в вопросе: Фактически код, который вы привели, не учитывает временных зон, то есть конвертирует количество секунд, прошедших с момента 0001.01.01 00:00 по местному времени (не важно, какому именно) в дату по тому же самому местному времени. Если это называть количеством секунд "от рождества Христова", то этот код можно признать правильным только в том часовом поясе, в котором Иисус родился. Вот код, который получает Timestamp (раз уж вам так хочется, хотя я не понимаю, зачем вам тут вообще нужен Date или "более корректный" Timestamp) и возвращает именно то, что вам надо (кол-во секунд с 00:00 01.01.01 местного времени в виде строки): package stackoverflow; import java.sql.Timestamp; import java.time.Duration; import java.time.LocalDateTime; import java.time.Month; import java.time.ZoneId; public class Ru_so_941590 { public static void main(String[] args) { Timestamp now = Timestamp.valueOf(LocalDateTime.now()); say("Местное время: " + now); String secondsAD_str = secsWouldHavePassedSinceChtistsBirthIfHeHadBeenBornHere(now); System.out.format("Если бы Спаситель родился здесь, " + "то с момента его рождения прошло бы\n\t\t %,d секунд\n", Long.parseLong(secondsAD_str) ); say("Converted back: " + dateStrFromSecondsAD(secondsAD_str)); } private static String secsWouldHavePassedSinceChtistsBirthIfHeHadBeenBornHere(Timestamp now) { LocalDateTime nowLocal = LocalDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault()); LocalDateTime christsBirthday = LocalDateTime.parse("0001-01-01T00:00:00"); return String.valueOf(Duration.between(christsBirthday, nowLocal).getSeconds()); } private static String dateStrFromSecondsAD(String secondStr) { LocalDateTime christsBirth = LocalDateTime.of(1, Month.JANUARY, 1, 0, 0, 0); LocalDateTime resDate = christsBirth.plusSeconds(Long.parseLong(secondStr)); return String.valueOf(resDate); } static void say(String format, Object... args) { System.out.println(String.format(format, args)); } static void say(String s) { System.out.println(s); } }

Комментариев нет:

Отправить комментарий