首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java打印持续时间,使其按字典顺序排序

使用Java打印持续时间,使其按字典顺序排序
EN

Stack Overflow用户
提问于 2015-12-15 14:45:20
回答 1查看 71关注 0票数 2

我有一个Joda持续时间对象列表。我想把它们转换成一个字符串列表,这样字符串就可以被人类识别,并且这个列表可以按字典排序。数据范围在任何地方,从5分钟到一周。我想出了以下几种选择:

  1. 毫秒。这是不可排序的,因此不工作(11之前的3个字典),也无法阅读。
  2. ISO 8601 (25小时零2分为0000-01T01:02)。这是可排序的,但很难读懂。
  3. ISO 8601持续时间(与上面的示例相同的是P1DT1H2M)。这既不可读,也不可排序。
  4. 类似DD:HH:mm (例如01:01:02)。这是有点难读,但至少是可排序的。

是否有用于此目的的标准文本表示时间,不会让用户感到惊讶?如果是这样的话,是否有一个标准函数知道如何生成这个文本表示?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 15:34:07

关于您的时间范围从分钟到星期,我建议您应用替代持续时间格式的ISO-8601。该标准明确地用于提供按词典排序的表示形式。Joda-Time在这里有一些支持

代码语言:javascript
复制
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 ddThh:mm:ss”的形式并不是真正的ISO。如果您阅读原始ISO-8601-论文(4.4.3.3节),则只提到日历部分的四种替代形式:

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

因此,Joda-Time在这里提供的是一项不基于ISO标准的发明,但可能对您的目的很方便。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34292109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档