localhost:8080/esccapp/tst/submit.jsp?key=datr&key2=datr2&key3=datr3
<%@page import="java.util.Enumeration"%>
<%
Enumeration in = request.getParameterNames();
while(in.hasMoreElements()) {
String paramName = in.nextElement().toString();
out.println(paramName + " = " + request.getParameter(paramName)+"<br>");
}
%>
key = datr
key2 = datr2
key3 = datr3
Используйте java.util.concurrent.TimeUnit
класс:
String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
Примечание: TimeUnit
часть спецификации Java 1.5, но toMinutes
был добавлен с Java 1.6.
Для добавления начального нуля для значений 0-9 просто сделайте:
String.format("%02d min, %02d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
, Если TimeUnit
или toMinutes
не поддерживаются (такой как на Android перед версией 9 API), используйте следующие уравнения:
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
//etc...
Я не вытянул бы в дополнительной зависимости только для того (подразделение не то, что трудно, в конце концов), но если Вы используете палату общин Lang так или иначе, существует DurationFormatUtils.
Использование В качестве примера (адаптированный от здесь ):
import org.apache.commons.lang3.time.DurationFormatUtils
public String getAge(long value) {
long currentTime = System.currentTimeMillis();
long age = currentTime - value;
String ageString = DurationFormatUtils.formatDuration(age, "d") + "d";
if ("0d".equals(ageString)) {
ageString = DurationFormatUtils.formatDuration(age, "H") + "h";
if ("0h".equals(ageString)) {
ageString = DurationFormatUtils.formatDuration(age, "m") + "m";
if ("0m".equals(ageString)) {
ageString = DurationFormatUtils.formatDuration(age, "s") + "s";
if ("0s".equals(ageString)) {
ageString = age + "ms";
}
}
}
}
return ageString;
}
Пример:
long lastTime = System.currentTimeMillis() - 2000;
System.out.println("Elapsed time: " + getAge(lastTime));
//Output: 2s
Примечание : получить millis от двух LocalDateTime возражает, что можно использовать:
long age = ChronoUnit.MILLIS.between(initTime, LocalDateTime.now())
Uhm..., сколько миллисекунд находится через секунду? И за минуту? Подразделение не это трудно.
int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
Продолжаются как этот в течение многих часов, дней, недель, месяцев, года, десятилетий, безотносительно.
Или вручите подразделения или используйте SimpleDateFormat API.
long start = System.currentTimeMillis();
// do your work...
long elapsed = System.currentTimeMillis() - start;
DateFormat df = new SimpleDateFormat("HH 'hours', mm 'mins,' ss 'seconds'");
df.setTimeZone(TimeZone.getTimeZone("GMT+0"));
System.out.println(df.format(new Date(elapsed)));
Редактирование Мороженое : Это показали в комментариях, что этот подход только работает на меньшие продолжительности (т.е. меньше чем день).
Во-первых, Вы не должны использовать System.currentTimeMillis()
или Instant.now()
для синхронизации. Они оба сообщают о тактовом стеной времени, которое компьютер не знает точно, и которое может переместиться беспорядочно, включая движение назад , если, например, демон NTP исправляет системное время. Вместо этого используйте System.nanoTime () .
, Во-вторых, от Java 8 вперед java.time. Продолжительность является лучшим способом представить продолжительность:
long start = System.nanoTime();
// do things...
long end = System.nanoTime();
Duration duration = Duration.ofNanos(end - start);
System.out.println(duration); // Prints "PT18M19.511627776S"
System.out.printf("%d Hours %d Minutes %d Seconds%n",
duration.toHours(), duration.toMinutes() % 60, duration.getSeconds() % 60);
// prints "0 Hours 18 Minutes 19 Seconds"