java - 在 Java 中解析人类可读的间隔
问题描述
许多应用程序支持人类可读的间隔,如 20d、1y、2m1d 等。
是否有解析这些内容的既定最佳实践?经验告诉我们,由于我们古怪的日历就是这样,时间解析通常会给粗心的旅行者带来大量陷阱。
解决方案
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
等。
推荐阅读
- c# - 为查询类型 Ef core 2.1 初始化数据
- stenciljs - 模板父组件变量更改不刷新子组件
- symfony - 如何使用 YAML 映射实现“alsoLoad”(Symfony)
- javascript - ( item.area_partition.homepage_show || item.area_partition.name ) 不符合我的要求
- bootstrap-confirmation - 根据条件启用/禁用按钮上的引导确认
- django - Talend ETL-postgres(django 框架)的问题日期导入
- php - 按相同的数组值计算多维数组值
- python - 如何用 PySide 连接两个不同的小部件?
- java - Spring Batch 将并发线程数限制为 10
- python - Python:如何忽略 functools.lru_cache 中的特殊参数?