Период до строки
Я использую библиотеку Joda-Time с Java. У меня возникли трудности с попыткой превратить объект Period в строку в формате "x days, x hours, x minutes".
Эти объекты Period сначала создаются путем добавления к ним количества секунд (они сериализуются в XML как секунды, а затем воссоздаются из них). Если я просто использую методы getHours() и т.д. в них, все, что я получаю, равно нулю и общее количество секунд с помощью getSeconds.
Как я могу заставить Joda рассчитать секунды в соответствующие поля, например, дни, часы и т.д.??
Ответы
Ответ 1
Вам нужно нормализовать период, потому что если вы построите его с общим количеством секунд, то это единственное значение, которое оно имеет. Нормализация будет разбита на общее количество дней, минут, секунд и т.д.
Редактировать ripper234 - добавление версии TL; DR: PeriodFormat.getDefault().print(period)
Например:
public static void main(String[] args) {
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(" and ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
Period period = new Period(72, 24, 12, 0);
System.out.println(daysHoursMinutes.print(period));
System.out.println(daysHoursMinutes.print(period.normalizedStandard()));
}
Будет напечатан:
24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds
Таким образом, вы можете видеть, что вывод для ненормированного периода просто игнорирует количество часов (он не конвертировал 72 часа в 3 дня).
Ответ 2
Вы также можете использовать форматирование по умолчанию, что хорошо для большинства случаев:
Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
Ответ 3
Period period = new Period();
// prints 00:00:00
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
period = period.plusSeconds(60 * 60 * 12);
// prints 00:00:43200
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
period = period.normalizedStandard();
// prints 12:00:00
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
Ответ 4
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
.appendDays()
**.appendSuffix(" day", " days")
.appendSeparator(" and ")
.appendMinutes()
.appendSuffix(" minute", " minutes")**
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
вам не хватает часов, поэтому. Добавление часов через несколько дней и решение проблемы.