Ява 8
Хорошо, это немного неприятно, но работа будет выполнена, это использует API времени Java 8.
LocalDateTime dt1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1429174464829L), ZoneId.systemDefault());
LocalDateTime dt2 = LocalDateTime.now().plusDays(1);
System.out.println(dt1);
System.out.println(dt2);
StringJoiner sj = new StringJoiner(":");
long hours = ChronoUnit.HOURS.between(dt1, dt2);
sj.add(Long.toString(hours));
dt2 = dt2.minusHours(hours);
long mins = ChronoUnit.MINUTES.between(dt1, dt2);
sj.add(Long.toString(mins));
dt2 = dt2.minusMinutes(mins);
long secs = ChronoUnit.SECONDS.between(dt1, dt2);
sj.add(Long.toString(secs));
System.out.println(sj);
И выведет что-то вроде...
2015-04-16T18:54:24.829
2015-04-17T14:10:54.281
19:16:29
Вот если бы я сделал что-то вроде...
LocalDateTime dt2 = LocalDateTime.now().plusDays(4);
Вместо этого я бы получил 91:21:10
.
Я надеюсь, что у кого-то есть лучшее решение, потому что это своего рода беспорядок...
Джода-Время
Если вы не можете использовать Java 8, используйте Joda-Time
DateTime dt1 = new DateTime(1429174464829L);
DateTime dt2 = DateTime.now().plusDays(4);
System.out.println(dt1);
System.out.println(dt2);
Duration yourDuration = new Duration(dt1, dt2);
Period period = yourDuration.toPeriod();
PeriodFormatter hms = new PeriodFormatterBuilder()
.printZeroAlways()
.appendHours()
.appendSeparator(":")
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
String result = hms.print(period);
System.out.println(result);
Что выводит 91:26:33
person
MadProgrammer
schedule
16.04.2015
var
— это продолжительность? - person MadProgrammer   schedule 16.04.2015SimpleDateFormat
действительно не подходит для форматирования длительности, что произойдет, если между ними будет 14 часов? - person MadProgrammer   schedule 16.04.2015