JodaTime日期格式化问题

时间:2011-05-24 16:36:04

标签: java datetime date time jodatime

我按如下方式格式化日期:

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 个答案:

答案 0 :(得分:3)

查看Period上可用的方法,尤其是toStandardSeconds()等方法。使用这些可以很简单地通过一些if-else语句来完成你所做的事情,例如

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

我认为PeriodFormatter在这种情况下是一个红色的鲱鱼,因为我认为不可能构建一个符合你想要的格式化程序 - 并且在if块中你可以只做得到秒/小时/等。直接使用与条件中相同的方法调用。

答案 1 :(得分:2)

您可以使用一系列if语句轻松实现此目的。如果这些是您的全部要求,您甚至可以考虑取消PeriodFormatter并直接从Period(通过toStandardSeconds()等)提取相关数据。

您当然可以使用period.toStandardSeconds()等来决定使用哪种格式。