Страницы

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

пятница, 11 января 2019 г.

Время с 1900 года

Есть дата в секундах с 1 января 1900 года: -699848845. Как вычислить нормальную дату?


Ответ

Старое API (до Java 8):
Calendar cal = new GregorianCalendar(); cal.setTimeZone( TimeZone.getTimeZone( "UTC" ) ); // не указано, в какой зоне 1 января 1900, будет в UTC cal.clear(); cal.set( 1900, 0, 1 ); // январь - нулевой месяц
SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS zzzz" ); format.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
System.out.println( format.format( cal.getTime() ) ); // 1900-01-01 00:00:00.000 Coordinated Universal Time
cal.add( Calendar.SECOND, -699_848_845 ); System.out.println( format.format( cal.getTime() ) ); // 1877-10-27 21:32:35.000 Coordinated Universal Time
Новое API (Java 8 java.time):
LocalDateTime result = LocalDateTime.of( 1900, 1, 1, 0, 0 ) // январь - 1 месяц .plusSeconds( -699_848_845 ); System.out.println( result ); // 1877-10-27T21:32:35
Результат выводится в современном календаре (ISO-8601), без учета временной зоны. Для дремучего прошлого, возможно, придется подключать ThreeTen-extra, где есть реализация юлианского календаря, и разбираться в предмете подробнее.

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

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