Java 如何在分钟内检索两个日期实例之间的差异?

Java 如何在分钟内检索两个日期实例之间的差异?,java,datetime,talend,Java,Datetime,Talend,根据,可以使用TalendDate.dateDiffFloor计算两个日期之间的差值,最长可达秒和毫秒 但是,文档没有说明如何(或必须指定哪个格式参数) 我必须在几秒钟内得到这个值,因为它将输入到tInfiniteLoop组件中 我试过“mmmm”和“mm”但运气不佳。在这种情况下,我会得到错误: Exception in component tMap_3 java.lang.RuntimeException: Can't support the dateType: mm ,please try

根据,可以使用
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)
我必须指定哪个参数才能获得分钟数?而且,如果不可行,如果不可能通过Talend,也许有一个解决方案可以在“普通”Java中实现这一点

我目前正在
tMap
组件中使用以下语句:

TalendDate.diffDateFloor(TalendDate.parseDateInUTC("EEE, d MMM yyyy HH:mm:ss", Var.expires), TalendDate.getCurrentDate(), "mmmm") 

我对
Talend
没有任何线索,但正如您所说的
vanilla
对您也是可能的:您可以使用类
Duration
,它表示
Duration
类型的两个对象之间的
Duration
。例如,这样的时态类将是
Instant
,它是时间线上的快照
Instant
在API中有很好的支持。您可以从
Date#到instant
,或从
Calendar#到instant
和更多内容中检索一个

看看这个小例子:

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()
返回
1453

请发布您的代码,以便我们能够提供帮助。因为这是Talend的工作,没有太多的代码。。。我将编辑到目前为止的内容。你可以使用Java 8 API解析这两个日期,它有一种方法可以给你以分钟为单位的时间间隔。你试过“MM”吗。它与“MM”不同吗?嗯。。。在Talend中,我(默认)只有一条语句。不过,我可能可以插入一个自定义Java组件。如果没有单语句解决方案,则必须使用自定义Java组件。但这是可行的。对于后代:添加一个
tJavaFlex
组件,并使用上面的代码来计算可以注入流中的时间差。