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
组件,并使用上面的代码来计算可以注入流中的时间差。