在java中指定持续时间
我正在开发一个应用程序,其中用户以这种格式发送一个持续时间“YY:MM:DD:HH:MM:ss”ex。1年2个月3天4小时5分钟6秒将指定为 1:2:3:4:5:6 根据这个值,我必须将持续时间转换为秒。我想知道是否有任何内置java类以这种格式指定持续时间 标准将一段时间内的字符串表示定义为在java中指定持续时间,java,date,time,calendar,duration,Java,Date,Time,Calendar,Duration,我正在开发一个应用程序,其中用户以这种格式发送一个持续时间“YY:MM:DD:HH:MM:ss”ex。1年2个月3天4小时5分钟6秒将指定为 1:2:3:4:5:6 根据这个值,我必须将持续时间转换为秒。我想知道是否有任何内置java类以这种格式指定持续时间 标准将一段时间内的字符串表示定义为PnYnMnDTnHnMnS,其中p标记开始,而T将日期部分与时间部分分开 例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间 一个半小时将是PT1H30M 默认
PnYnMnDTnHnMnS
,其中p
标记开始,而T
将日期部分与时间部分分开
例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间
一个半小时将是PT1H30M
默认情况下,库具有Period类,该类同时解析和生成该格式
有关更多信息,请搜索StackOverflow。Java-8已引入,并作为的一部分,但对于在中指定的组合期间和持续时间的类型,已经有很长的等待时间
但是,javax.xml.datatype.Duration
从Java-6开始就存在了,我们可以使用它来实现您想要的。假设文本的格式始终为y:M:d:H:M:s
,例如1:2:3:4:5:6
演示:
import java.util.Calendar;
import java.util.concurrent.TimeUnit;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
public class Main {
public static void main(String[] args) throws DatatypeConfigurationException {
String[] durationParts = "1:2:3:4:5:6".split(":");
char[] symbols = "YMDHMS".toCharArray();
StringBuilder sb = new StringBuilder("P");
for (int i = 0; i < durationParts.length; i++) {
sb.append(durationParts[i]).append(symbols[i]);
if (i == 2) {
sb.append("T");
}
}
String strIso8601Duration = sb.toString();
System.out.println(strIso8601Duration);
Duration duration = DatatypeFactory.newInstance().newDuration(strIso8601Duration);
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
long seconds = TimeUnit.MILLISECONDS.toSeconds(duration.getTimeInMillis(calendar));
System.out.println(seconds);
}
}
P1Y2M3DT4H5M6S
36907506
使用SimpleDataFormat,然后将日期转换为seconds@SanjayRabari从什么时候算起的秒数?日期指定时间点,而不是长度(对于长度,我们需要两个点)。我不是说你的总体想法不好,但你需要更具体一点:)@Pshemo-ya-u-right.我想他必须举例说明你一个月算几天?这似乎不可能。一个月有多少天?28, 30, 31? 如果您想要一个近似值,我只需拆分字符串并将值相乘,并假设该月有30天,一年365天。