#java #дата
Есть дата в секундах с 1 января 1900 года: -699848845. Как вычислить нормальную дату?
Ответы
Ответ 1
Старое 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, где есть реализация юлианского календаря, и разбираться в предмете подробнее.Ответ 2
Добавляем в зависимости joda-time и получаем результат: public class TestDate { public static final DateTimeFormatter FULL_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd").withLocale(Locale.getDefault()); public static void main(String[] args) { DateTime dt = DateTime.parse("1900-01-01", FULL_FORMATTER); int seconds = 699848845; System.out.println(FULL_FORMATTER.print(dt.minusSeconds(seconds))); } }
Комментариев нет:
Отправить комментарий