2016-09-12 8 views
1

the Talend docsによれば、秒とミリ秒までのTalendDate.dateDiffFloorを使用して2つの日付間の差を計算することができます。2つのDateインスタンスの差異を数分で取得するにはどうすればよいですか?

ただし、ドキュメントではどのように(またはどの形式パラメータを指定する必要があるのか​​)は言いません。

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経由では不可能であれば "vanilla" Javaでこれを行う回避策がありますか?

私は現在tMapコンポーネントで次のステートメントを使用しています:

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

私たちが手助けできるようにコードを投稿してください。 – lsiva

+0

これはTalendの仕事なので、コードはあまりありません...私はこれまでのところで編集します。 – exhuma

+1

Java 8 APIを使用して2つの日付を解析することができます。間隔は分単位で指定できます。 –

答えて

2

私は何の手がかりについてTalendを持っていませんが、あなたが言ったようにvanillaもあなたのために可能である:あなたはdurationを表すクラスDurationを使用することができますタイプTemporalの2つのオブジェクトの間。そのような時間クラスは、例えば、タイムライン上のスナップショットであるInstantである。 InstantはAPIで大きな支持を得ています。 Date#toInstantから、またはCalendar#toInstantから1つを取得できます。私はクラス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()); 

は、この小さな例を参照してください。これで十分でない場合は、 Temporalを実装する別のクラスを使用するか、独自のクラスを作成することができます。これらのメソッドの戻り値( longが)( floor)下方向に丸みを帯びていることを

Duration#toMinutes() 
Duration#toMillis() 

注:アプリケーションの

は、おそらくに興味を持っています。だから 実数分の数値が 1.453の場合、 toMinutes()1toMillis()を返します。 1453を返します。

+0

うーん... Talendでは、私は(デフォルトで)1つのステートメントしか持っていません。私はカスタムJavaコンポーネントをドロップすることができるかもしれません。 1つのステートメント解決策がない場合。 – exhuma

+0

カスタムJavaコンポーネントを使用していました。しかし、これは動作します。後継の場合: 'tJavaFlex'コンポーネントを追加し、上記のコードを使用して異なる時間を計算し、それをフローに注入することができます。 – exhuma

関連する問題