首页 > 解决方案 > 在 Java 中解析人类可读的间隔

问题描述

许多应用程序支持人类可读的间隔,如 20d、1y、2m1d 等。

是否有解析这些内容的既定最佳实践?经验告诉我们,由于我们古怪的日历就是这样,时间解析通常会给粗心的旅行者带来大量陷阱。

标签: javadateintervals

解决方案


java.time

使用Java 8 及更高版本中内置的java.time类。这些取代了可怕的遗留日期时间类。

Period

在这些类中Period,以年-月-日为尺度,代表一个独立的时间跨度。

ISO 8601

该类在解析/生成文本时使用标准ISO 8601 格式PnYnMnDTnHnMnS: . P标记是开始,将T任何年-月-日与任何小时-分钟-秒分开。

String input = "P2M1D" ;
Period p = Period.parse( input ) ;

如果您有非标准输入,例如20d您可以进行一些简单的字符串操作以符合标准。

String input = "20d" ;
String modified = "P" + input.toUpperCase() ;
Period p = Period.parse( modified ) ;

三十-额外

要表示附加到时间线的时间跨度,请将ThreeTen-Extra库添加到您的项目中。使用它的LocalDateRange类来表示一对LocalDate对象,以及方便的比较方法,例如contains,abuts等。


推荐阅读