Проблема форматирования даты JodaTime - PullRequest
0 голосов
/ 24 мая 2011

Я форматирую свою дату следующим образом:

String inputDateString = aMessage.getString("updated_at");
                        DateTimeFormatter fmt = ISODateTimeFormat.dateTimeNoMillis();

                        DateTime date = fmt.parseDateTime(inputDateString);
                        DateTime now = new DateTime();
                        Period period = new Period(date, now);

                        PeriodFormatter formatter = new PeriodFormatterBuilder()
                            .appendSeconds().appendSuffix(" seconds ago\n")
                            .printZeroNever()
                            .toFormatter();

                        String elapsed = formatter.print(period);

                        dateTextView.setText(elapsed);

Я бы хотел показать:

3 seconds ago if the period is less than 60 seconds
3 minutes ago if the period is less than 60 minutes
3 hours ago is the period is less than X hours
3 days ago if the period is less than X days 

и т.д.. и т.д.

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Посмотрите методы, доступные в Period , в частности такие, как toStandardSeconds(). Используя их, будет просто достичь желаемого с помощью нескольких if-else операторов, выполняющих такие тесты, как

if (period.toStandardSeconds().getSeconds() < 60) {
   // form second-based string
}
else if (period.toStandardMinutes().getMinutes() < 60) {
   // ...

Я думаю, что PeriodFormatter - это красная сельдь в этом случае, так как я не думаю, что возможно создать единственный форматер, который делает то, что вы хотите - и в блоках if вы можете просто получить секунды ч / т. напрямую используя те же вызовы методов, что и в условных выражениях.

2 голосов
/ 24 мая 2011

Вы можете легко достичь этого с помощью серии if операторов.Если это полностью ваши требования, вы можете даже подумать об отказе от PeriodFormatter и извлечении соответствующих данных непосредственно из Period (через toStandardSeconds() и др.).Вы можете использовать period.toStandardSeconds() и т. Д., Чтобы решить, какой формат использовать.

...