问题将字符串日期转换为长值并执行计算

时间:2017-09-07 11:09:11

标签: java date long-integer duration string-parsing

我有一个字符串值的映射,表示不同组件的停机时间。

dependencyMap.put ("sut", "14:26:12,14:27:19,00:01:07;15:01:54,15:02:54,00:01:00;15:44:30,15:46:30,00:02:00;16:10:30,16:11:30,00:01:00");
dependencyMap.put ("jms", "14:26:12,14:28:12,00:02:00;15:10:50,15:12:55,00:02:05;15:42:30,15:43:30,00:01:00;16:25:30,16:27:30,00:02:00");

字符串表示停机时间的开始,结束和持续时间。

(start)14:26:12,(end)14:27:19,(duration)00:01:07

我读取了值,然后将它们添加到DependencyDownTime个对象列表中,这些对象包含Long值startTime,endTime和duration。

jArray.forEach (dependency ->{
            String downTimeValues = knownDowntimesMap.get(dependency);
            final String[] downtime = downTimeValues.split (";");
            for (final String str : downtime) {
                final DependencyDownTime depDownTime = new DependencyDownTime ();
                final String[] strings = str.split (",");
                if (strings.length == 3) {
                    final DateFormat dateFormat = new SimpleDateFormat ("HH:mm:ss");
                    try {
                        depDownTime.setStartTime(dateFormat.parse (strings[0]).getTime ());
                        depDownTime.setEndTime (dateFormat.parse (strings[1]).getTime ());
                        depDownTime.setDuration (dateFormat.parse (strings[2]).getTime ());
                        downTimes.add (depDownTime);
                    } catch (final ParseException e) {
                        //logger.warn (e.getMessage (), e);
                    }
                } else {
                    //logger.warn ("");
                }
            }

然后我对这些值执行简单的算术运算,计算每个组件的总停机时间。

// sort the list by start time
        Collections.sort(downTimes, Comparator.comparing (DependencyDownTime::getStartTime));

        int i = 1;
        Long duration = 0L;
        for(DependencyDownTime dts: downTimes){
            Long curStart = dts.getStartTime ();
            Long curEnd = dts.getEndTime();

            Long nextStart = downTimes.get(i).getStartTime ();
            Long nextEnd = downTimes.get(i).getEndTime ();

            if(duration == 0){
                duration = dts.getDuration();
            }
            if(curStart.equals(nextStart) && curEnd < nextEnd){
                duration += (nextEnd - curEnd);
            }
            else if(nextStart > curEnd){
                duration += downTimes.get(i).getDuration();
            }
            else if( curStart < nextStart && curEnd > nextStart){
                duration += (nextEnd - curEnd);
            }
            else if(curEnd == nextStart){
                duration += downTimes.get(i).getDuration();
            }
            i++;
            if(i == downTimes.size ()){
                componentDTimeMap.put (application, duration);
                return;
            }

预期值应该是1970-01-01T 00:14:35 .000+0100,只需几分钟。差异1969-12-31T 15:13:35 .000+0100

中的实际结果通常是几个小时

我有2个问题。

  1. 我是否正确解析了这些值?

  2. 如果在添加和减去长值时我的计算有点偏差。当我将值转换回日期格式时,预期值会有很大差异吗?

0 个答案:

没有答案