今天我想要一种有效的方式转换custom formatted selectors to seconds
。
如果我输入5d,6h'它应该输出=> [x秒]
选择器可以是任意数字> 999
,并且minutes,seconds, hours, days, and years, where the preceding character is the selector, y for years, h for hours, and etc.
支持。另一个例子是9d 4s
,它仍然输出[x number of seconds]
。两个"选择器"字符串存储在数组中。非常感谢!
答案 0 :(得分:0)
虽然您的问题令人困惑,但有几个类和标准字符串格式可能接近您想要的
Java提供了两个类来表示未附加到时间轴的时间跨度。
Duration
(天 - 小时 - 分 - 秒)Period
(年 - 月 - 日)两个类都可以解析并生成标准ISO 8601格式的P [n] Y [n] M [n] DT [n] H [n] M [n] S的字符串。 P
标记开头,T
将y-m-d与h-m-s部分分开。所以五天六小时是P5DT6H
。
Duration d = Duration.parse( "P5DT6H" );
走向另一个方向。
String output = d.toString();
P5DT6H
您可以通过调用各种方法来查询值,在Java 9中添加了更多方法。
如果您想要整个持续时间的总秒数:
long totalSeconds = d.getSeconds() ;
已经在Stack Overflow上多次介绍过,所以请搜索更多讨论和示例。并且请在发布之前更彻底地搜索Stack Overflow。
答案 1 :(得分:0)
我在java中编写了一个开源库MgntUtils,部分回答了这个要求。它包含一个静态方法parsingStringToTimeInterval(String value)
此方法解析一个预期保存一些时间间隔值的字符串 - 一个带有可选时间单位后缀的数值。例如,字符串“38s”将被解析为38秒,“24m” - 24分钟“4h” - 4小时,“3d” - 3天和“45”将被解析为45毫秒。支持的后缀为秒数“s”,分钟为“m”,小时为“h”,日期为“d”。不带后缀的字符串被认为是以毫秒为单位保存的值。后缀不区分大小写。如果提供String包含不受支持的后缀或保留负数值或零或保存非数字值 - 则抛出IllegalArgumentException。此方法返回TimeInterval类 - 也是在此库中定义的类。本质上,它包含两个具有相关getter和setter的属性:long“value”和java.util.concurrent.TimeUnit。但除了getter和setter之外,这个类还有方法toMillis(),toSeconds(),toMinutes(),toHours()toDays()。这些方法在指定的时间范围内返回长值(与java.util.concurrent.TimeUnit类中的对应方法相同)
此方法对于解析时间间隔属性(如超时或配置文件中的等待时间)非常有用。它消除了从不同时间尺度到来回毫秒的不必要计算。请考虑您有一个需要设置5天的methodInvokingInterval属性。因此,为了设置毫秒值,您需要计算5天是432000000毫秒(显然不是一个不可能的任务,但烦人且容易出错)然后看到值432000000的任何其他人将不得不计算回到5天令人沮丧。但是使用此方法,您将具有设置为“5d”的属性值并调用代码
long seconds = TextUtils.parsingStringToTimeInterval("5d").toSeconds();
将解决您的转化问题。显然,这不是一个过于复杂的功能,但它可以在配置文件中增加简单性和清晰度,并将一些挫败感和“愚蠢”错误计算保存到几毫秒的错误中。以下是描述MgntUtils库的文章的链接以及获取它的位置:MgntUtils