타임 스탬프 값이 "dd-MM-yyyy hh : mm : ss.SSSSS"형식으로 표시됩니다 (예 : "2016-05-22 01 : 02 : 36.909093"). 위에서 언급 한 동일한 형식의 두 값의 차이를 계산해야합니다. 아무도 이것을 극복 할 수 있을까?노새에서 두 개의 타임 스탬프 값의 차이점을 찾는 방법은 무엇입니까?
0
A
답변
0
Java 용으로 Joda 날짜 라이브러리를 사용할 수 있습니다.
1
나는 Mule에 대해 몰라,하지만 자바 쪽에서는 쉽다.
java.time
하여 입력 문자열을 가정하는 것은 T
에 의해 중간에 그 공간을 교체 한 후 Instant
로 구문 분석, UTC입니다.
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);
당신은 자바 (8)의 Duration
클래스는 심문 편리한 방법을 결여되고, 총 시간 수 또는 전체 일 또는
이상하게 분 등의 총으로 그 길이에 대한 Duration
을 요청할 수 있습니다 시간이나 분과 같은 부분. Java 9에서는이 부족한 점이 "getPart"메소드로 해결됩니다.
Duration
클래스는 표준 ISO 8601 형식으로 문자열을 구문 분석하고 생성 할 수 있습니다. 예를 들어 1 시간 반은 PT1H30M
입니다.
1
우리는 아래에 직접 dataweave를 사용하여 기간을 생성 할 수 있습니다 당신에게
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
을 도울 수있는 코드입니다, 그와 함께 확인 그루비를 위해 이동해야합니다. 귀하의 페이로드 인 경우 : 분명히
{
"period": "PT25H11M11.111111S"
}
당신이 다음 다른 형식으로 리팩토링 할 수
%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
}
출력으로 다음과 같이 표시됩니다
{
"date1":"21-07-2016 10:00:00.000000",
"date2":"22-07-2016 11:11:11.111111"
}
그런 다음이 dataweave은 기간을 제공합니다 또는 출력 목표.