众力资讯网

Java解析指定格式字符串获取过期时间

一、简介在日常开发中,经常会遇到这么一个场景,即通过配置中心设置某个缓存的过期时间,但线上和线下支持的维度却不同。比如正
一、简介

在日常开发中,经常会遇到这么一个场景,即通过配置中心设置某个缓存的过期时间,但线上和线下支持的维度却不同。比如正常而言,线上的过期时间以天为维度,而线下为了方便测试,可能得以秒或分为单位。当然,水无常势,法无定则,可以用两个配置来区分环境。但个人感觉那么做有点不那么优雅。所以苦思良久,终于琢磨出一个根据指定格式字符串来解析获取指定时长的方法。

二、思路

首先应该定义字符串格式,本人定义的解析格式为: 1d2h3m4s。其中数字后面字母的含义为:

d: 表示天

h:表示小时

m:表示分钟

s:表示秒

然后需要定义一个解析的方法,能解析出数字和单位。当然,分别给出 Java8之前和之后的实现。因为本人觉得使用 Java8新增的 API时间更简洁和易理解。

2.1 Java之前

下面为解析的方法:

执行结果如下所示:

解析之后只需要将其按指定单位进行累加即可,如按秒累加,对应的代码示例如下所示:

执行结果如下所示:

2.2 Java8 之后

因为 Java8 新增了类似 JodaTime的时间 API,因此在获取和计算时间时候更便捷。下面给出 Java8 之后的实现。首先是解析指定格式的字符串并获取 时间间隔列表:

执行结果如下所示:

上述结果也好理解, PT24H表示24小时,也即一天,PT2H表示2小时,PT3M表示3分钟,PT4S 表示4秒。这属于Duration的解析格式。当然,这里无需在意,毕竟只是用 Duration 接收解析结果而已。

接着对结果进行累加,对应代码如下所示:

执行结果如下所示: