Java中的打印持续时间,以便按字典顺序排序

时间:2015-12-15 14:45:21

标签: java jodatime

我有一个Joda Duration个对象的列表。我想将它们转换为字符串列表,以便字符串对人类清晰,并且列表可以按字典顺序排序。数据范围从5分钟到一周不等。我想到了以下几个选项:

  1. 毫秒。这不是可排序的,因此不起作用(11在按字典顺序排列之前),也不可读。
  2. ISO 8601(25小时2分钟为0000-00-01T01:02)。这是可以排序的,但很难阅读。
  3. ISO 8601持续时间(与上述相同的例子是P1DT1H2M)。这既不可读也不可排序。
  4. 像DD:HH:mm(例如01:01:02)。这有点难以阅读,但至少可以排序。
  5. 是否有用于此目的的持续时间的标准文本表示不会让用户感到惊讶?如果有,是否有一个知道如何生成这种文本表示的标准函数?

1 个答案:

答案 0 :(得分:1)

关于您有几分钟到几周的事实,我建议您应用替代持续时间格式ISO-8601 。该标准明确开发用于提供按字典顺序排序的表示。 Joda-Time在这里有some support

Duration d = new Duration(100000000L); // in milliseconds
Period p = d.toPeriodFrom(new DateTime(), PeriodType.yearWeekDayTime());
PeriodFormatter f = ISOPeriodFormat.alternateExtendedWithWeeks();
String s = f.print(p);
System.out.println(s); 
// P0000-W00-01T03:46:40 (one day, 3 hours, 46 minutes and 40 secs)

也许年份部分仍然会打扰你,但这只是ISO表示,并且总是将值0000与您的持续时间值相对应。

更新和小修正:

严格来说,只是澄清表格" Pyyyy-Www-ddThh:mm:ss"不是真的ISO。如果您阅读原始的ISO-8601论文(第4.4.3.3节),那么日历部分只提到四种替代形式:

  • PYYYY-MM-DD
  • PYYYYMMDD
  • PYYYY-DDD(扩展序数形式)
  • PYYYDDD(基本顺序形式)

所以Joda-Time在这里提供的不是基于ISO标准的发明,而是可能方便您的目的。