Вопрос

На этот вопрос уже есть ответ здесь:

Я использую Джода-Время библиотека с Java.У меня возникли некоторые трудности при попытке превратить объект Period в строку в формате "x дней, x часов, x минут".

Эти объекты периода сначала создаются путем добавления к ним количества секунд (они сериализуются в XML как секунды, а затем воссоздаются на их основе).Если я просто использую getHours() и т.д.методы в них, все, что я получаю, - это ноль и итого количество секунд с получением секунд.

Как я могу заставить Joda вычислять секунды в соответствующих полях, таких как дни, часы и т.д.?

Это было полезно?

Решение

Вам нужно нормализовать период, потому что если вы построите его с общим количеством секунд, то это единственное значение, которое он имеет.Нормализация приведет к разбивке его на общее количество дней, минут, секунд и т.д.

Правка 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 дня).

Другие советы

Вы также можете использовать форматировщик по умолчанию, который подходит для большинства случаев:

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
    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()));
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    **.appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")**
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

ты упускаешь время, вот почему.Добавляйте часы через несколько дней, и проблема будет решена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top