Ich bekomme den Zeitstempel Wert im Format "TT-MM-JJJJ hh: mm: ss.SSSSSS" zB: "2016-05-22 01: 02: 36.909093". Ich muss den Unterschied zwischen den zwei Werten des gleichen oben erwähnten Formats berechnen. Könnte jemand helfen, dies zu überwinden?Wie finde ich den Unterschied zwischen zwei Timestamp-Werten in Mule?
Antwort
Sie können Java dafür verwenden und Joda Date-Bibliothek verwenden.
Ich weiß nicht über Mule, aber auf der Java-Seite ist es einfach.
java.time
Angenommen Zeichenfolge Ihre Eingabe in UTC ist, analysieren sie als Instant
nachdem er von einem T
, dass der Raum in der Mitte ersetzt.
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);
Sie können sich als Gesamtzahl der Stunden oder insgesamt Tage oder insgesamt Minuten die Duration
für seine Länge fragen usw.
Merkwürdig ist, dass in Java 8 die Duration
Klasse bequeme Methoden fehlt zum Abfragen die Teile wie Stunden oder Minuten. In Java 9 wird dieser Mangel durch "getPart" -Methoden behoben.
Die Klasse kann Strings im Standard ISO 8601-Format analysieren und generieren. Zum Beispiel ist eine Stunde und eine halbe PT1H30M
.
Wir brauchen für einen groovigen gehen damit zu überprüfen, unter der Code, den Sie
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');
Sie können einen Zeitraum erzeugen direkt mit dataweave. Wenn Ihre Nutzlast war:
{
"date1":"21-07-2016 10:00:00.000000",
"date2":"22-07-2016 11:11:11.111111"
}
Dann ist dieses dataweave gibt Periode:
%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
}
die wie folgt als Ausgabe aussehen:
{
"period": "PT25H11M11.111111S"
}
Offensichtlich kann man dann in ein anderes Format Refactoring oder Ausgabeziel.