2016-07-21 3 views
0

Я получаю значение метки времени в формате «dd-MM-yyyy hh: mm: ss.SSSSSS», например: «2016-05-22 01: 02: 36.909093». Мне нужно рассчитать разницу между двумя значениями того же формата, о которых говорилось выше. Может ли кто-нибудь помочь преодолеть это.Как найти разницу между двумя значениями времени в муле?

ответ

0

Вы можете использовать java для этого и использовать библиотеку дат Joda.

1

Я не знаю о Муле, но на стороне Java это легко.

java.time

Если предположить, что входной строки в UTC, разобрать его, как Instant после замены, что пространство в середине по T.

String input = "2016-05-22 01:02:36.909093".replace(" " , "T"); 
Instant instant = Instant.parse(input); 

Instant now = Instant.now(); 

Duration duration = Duration.between(instant , now); 

Вы можете задать Duration для его длины, как общее количество часов, или в общей сложности дней или в общей сложности минут и т.д.

Как ни странно, в Java 8, Duration класса отсутствуют удобные методы допроса таких как часы или минуты. В Java 9 этот недостаток исправляется методами getPart.

Класс Duration может анализировать и генерировать строки в стандартном формате ISO 8601. Например, полтора часа - PT1H30M.

1

Нам нужно пойти на заводной, чтобы проверить с этим, ниже код, который может помочь вам

import java.util.Calendar; 
 
import java.util.HashMap; 
 
import java.util.Map; 
 
import java.util.Iterator; 
 
import java.util.Set; 
 
import java.util.Date; 
 
import java.text.SimpleDateFormat; 
 
format = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); 
 
       
 
if(flowVars.lastRunDateTime==null||flowVars.lastRunDateTime=='0') 
 
flowVars.lastRunDateTime=flowVars.currentRunDateTime; 
 

 
log.info("last run date time"+flowVars.lastRunDateTime); 
 
log.info("current time"+flowVars.currentRunDateTime); 
 

 
       date1=flowVars.lastRunDateTime; 
 
       date2=flowVars.currentRunDateTime; 
 
     
 
       
 
        d1 = null; 
 
         d2 = null; 
 
         d3 = null; 
 
         
 
        d1 = format.parse(date1); 
 
        d2 = format.parse(date2); 
 
         
 
        diff=d2.getTime()-d1.getTime(); 
 
         
 
         t=diff/60000; 
 
         
 
        log.info(t + " total Minutes ");       
 
                
 
        if(t>30) 
 
        { 
 
        log.info("initial Time"+d1); 
 
        calendar = Calendar.getInstance(); 
 
        calendar.setTime(d1); 
 
        calendar.add(Calendar.MINUTE, ${time.gap}); 
 
        d3= calendar.getTime(); 
 
        log.info("Final Time"+d3); 
 
        flowVars.lastRunDateTime=format.format(d1); 
 
        flowVars.currentRunDateTime=format.format(d3); 
 
        log.info("last run date time"+flowVars.lastRunDateTime); 
 
        log.info("current time"+flowVars.currentRunDateTime); 
 
        }      
 
        
 
       
 
flowVars.put('IM_START_DATE', flowVars.lastRunDateTime.substring(0,10)); 
 
flowVars.put('IM_START_TIME' , flowVars.lastRunDateTime.substring(10,16) + '01'); 
 
flowVars.put('IM_END_DATE' , flowVars.currentRunDateTime.substring(0,10)); 
 
flowVars.put('IM_END_TIME' , flowVars.currentRunDateTime.substring(10,16) +'00');

1

Вы можете создать период с использованием dataweave непосредственно. Если полезная нагрузка была:

{ 
"date1":"21-07-2016 10:00:00.000000", 
"date2":"22-07-2016 11:11:11.111111" 
} 

Тогда это dataweave дает свой период:

%dw 1.0 
%output application/json 
%type fdate = :localdatetime {format: "dd-MM-yyyy HH:mm:ss.SSSSSS"} 
--- 
{ 
period: 
payload.date1 as :fdate - payload.date2 as :fdate 
} 

Какой будет выглядеть так, как выход:

{ 
    "period": "PT25H11M11.111111S" 
} 

Очевидно, что вы можете реорганизовать в другой формат или выходной цели.

Смежные вопросы