2012-01-15 4 views
2

Я пытаюсь установить свой объект Period с помощью конструктора «millis» и соответствующим образом обновлять все соответствующие поля (годы, месяцы, недели, дни, часы, минуты, секунды)Время в Joda, Период от millis

То есть, используя следующий код:

mPeriod = new Period(millis, PeriodType.standard()); 

не заполняет все соответствующие поля соответственно. только недели и минуты (для входных миллинов 1325965615539)

Может кто-нибудь, пожалуйста, помогите мне понять эту вещь?

ответ

1

Вы можете нормализовать его с помощью Period#normalizedStandard();

Однако, нет никакого способа Period может «заполнить все соответствующие поля», потому что он не может делать предположения о количестве дней в месяцах или годах. Лучшее, что он может сделать, это превратить его в недели, дни и поля времени.

В Javadoc штрихи на это, но не в деталях:

Если период содержит лет или месяцев, то месяцы будет нормализуется быть между 0 и 11. дней поля и ниже, be нормализуется по мере необходимости, однако этот не будет переполняться в поле месяцев. Таким образом, период в 1 год 15 месяцев нормализуется до 2 лет 3 месяца. Но период в 1 месяц 40 дней останется за 1 месяц 40 дней.

(выделено мной)

Если вам это нужно, чтобы нормализовать в годы и месяцы, вам нужно построить Period со значениями в этих областях.

В качестве альтернативы можно использовать Duration:

  1. Построить Duration с миллисекундах
  2. Duration#toPeriodFrom(ReadableInstant) Используйте для создания Period, начиная с данного момента времени (например, новый DateTime()). Согласно документам, это должно работать:

    Это преобразование будет точно определять поля периода. Результаты основаны на мгновенных миллисах, хронологии моментального времени , стандартного типа периода и продолжительности этой продолжительности.


Вот что normalize() нужно сделать, чтобы ваш вклад миллисекунды:

import org.joda.time.Period; 

class Normalize { 
     public static void main(String[] args) { 
       Period period = new Period(1325965615539L); 
       System.out.println(period); 
       System.out.println(period.normalizedStandard()); 
     } 
} 

// outputs 
PT368323H46M55.539S 
P2192W2DT19H46M55.539S 

Обратите внимание на второй линии имеет нормализовалось, но только до недели.

+0

Нормализация не имеет никакого эффекта. Не сделал ничего ... – Droritos

+0

@DrorWeiss - Вероятно, это имело эффект, но, возможно, не то, что вы ожидали. Я уточнил свой ответ, чтобы выяснить, почему. –

Смежные вопросы