Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中指定持续时间_Java_Date_Time_Calendar_Duration - Fatal编程技术网

在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 默认

我正在开发一个应用程序,其中用户以这种格式发送一个持续时间“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

默认情况下,库具有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天。