Date выдает неверные результаты

122
27 декабря 2020, 11:50
DateFormat format = new SimpleDateFormat("ddд HHч mmм ssс") ;
format.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println( format.format(new Date(864000000000L)));

Данный пример кода выводит

19д 00ч 00м 00с

Но 864000000000 секунд = 10000 дням. В чем же проблема?

Answer 1

Вы неправильно используете паттерн dd. Согласно документации это:

d - Day in month

Поэтому все вполне логично.

Чтобы получить желаемый результат воспользуйтесь следующим кодом:

long days = TimeUnit.MILLISECONDS.toDays(864000000000L);
Answer 2

Остальные дни - в годах и месяцах, которые не включены в формат.

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Дата (Date) - это метка на календаре и часах, а не промежуток времени.

Answer 3

864000000000L в милисекундах, а не в секундах

/**
 * Allocates a <code>Date</code> object and initializes it to
 * represent the specified number of milliseconds since the
 * standard base time known as "the epoch", namely January 1,
 * 1970, 00:00:00 GMT.
 *
 * @param   date   the milliseconds since January 1, 1970, 00:00:00 GMT.
 * @see     java.lang.System#currentTimeMillis()
 */
public Date(long date) {
    fastTime = date;
}
READ ALSO
Как узнать весь путь до rest метода в spring

Как узнать весь путь до rest метода в spring

Я тестирую чужой проектВ нем есть контроллер api которого я хочу проверить

109
Empty or unknow structure in JNA

Empty or unknow structure in JNA

Пишу обертку для Leap Motion в Javadll подключаю через JNA

133
Java. Очереди потоков

Java. Очереди потоков

Помогите составить архитектуру приложения

95
Как сделать интервал между Toast?

Как сделать интервал между Toast?

У меня в коде toast вызывается бесконечно, но я хочу чтобы он вызывался условно каждые 20 секундКак я могу это реализовать?

101