根据the Talend docs,可以使用TalendDate.dateDiffFloor
计算两个日期之间的差异,最多可达秒和毫秒。
但是,文档没有说明如何(或必须指定哪种格式参数)。
我必须在几秒钟内获得此值,因为它将输入tInfiniteLoop
组件。
我尝试使用"mmmm"
和“mm
”但没有运气。在那种情况下,我收到错误:
Exception in component tMap_3
java.lang.RuntimeException: Can't support the dateType: mm ,please try "yyyy" or "MM"
at routines.TalendDate.diffDateFloor(TalendDate.java:661)
at timeouttester.job_2_0_1.job_2.tInfiniteLoop_2Process(job_2.java:1156)
at timeouttester.job_2_0_1.job_2.runJobInTOS(job_2.java:1616)
at timeouttester.job_2_0_1.job_2.main(job_2.java:1464)
我需要指定哪个参数才能获得分钟数?并且,如果不可行,也许有一种解决方法在“vanilla”Java中执行此操作,如果Talend无法实现的话?
我目前在tMap
组件中使用以下语句:
TalendDate.diffDateFloor(TalendDate.parseDateInUTC("EEE, d MMM yyyy HH:mm:ss", Var.expires), TalendDate.getCurrentDate(), "mmmm")
答案 0 :(得分:2)
我对Talend
一无所知,但正如您所说vanilla
也是可能的:您可以使用代表两个对象之间Duration
的{{1}}类输入duration
。例如,这样的时间类将是Temporal
,它是时间线上的快照。 Instant
在API中得到了很大的支持。您可以从Instant
或Date#toInstant
及更多内容中检索一个。
见这个小例子:
Calendar#toInstant
但是,如果我没有弄错,那么班级Date dateBefore = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime();
Instant before = dateBefore.toInstant();
Instant now = Instant.now();
Duration duration = Duration.between(before, now);
System.out.println("Days: " + duration.toDays());
本身只能精确到毫秒级。如果这还不够,您可以使用另一个实现Instant
的类或创建自己的类。
对于您的应用程序,您可能对以下内容感兴趣:
Temporal
请注意,这些方法的返回值(Duration#toMinutes()
Duration#toMillis()
)向下舍入(long
)。因此,如果真实的分钟数,floor
,1.453
将返回toMinutes()
,1
将返回toMillis()
。