如何在几分钟内检索两个Date实例之间的差异?

时间:2016-09-12 15:49:22

标签: java datetime talend

根据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") 

1 个答案:

答案 0 :(得分:2)

我对Talend一无所知,但正如您所说vanilla也是可能的:您可以使用代表两个对象之间Duration的{​​{1}}类输入duration。例如,这样的时间类将是Temporal,它是时间线上的快照。 Instant在API中得到了很大的支持。您可以从InstantDate#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)。因此,如果真实的分钟数,floor1.453将返回toMinutes()1将返回toMillis()