[Java日期]使用特定格式添加天数

时间:2016-11-07 02:26:40

标签: java string date

今天我想要一种有效的方式转换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]。两个"选择器"字符串存储在数组中。非常感谢!

2 个答案:

答案 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