72

特定の日付から現在までの経過時間を計算し、StackOverflowの質問と同じ形式で表示する必要があります。

15s ago
2min ago
2hours ago
2days ago
25th Dec 08

Java Joda-Timeライブラリでそれを実現する方法を知っていますか?すでにそれを実装しているヘルパーメソッドはありますか、それとも自分でアルゴリズムを書く必要がありますか?

4

6 に答える 6

116

JodaTime で経過時間を計算するには、 を使用しますPeriod。必要な人間の表現で経過時間をフォーマットするには、PeriodFormatterwhich you can build by を使用しますPeriodFormatterBuilder

キックオフの例を次に示します。

DateTime myBirthDate = new DateTime(1978, 3, 26, 12, 35, 0, 0);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);

PeriodFormatter formatter = new PeriodFormatterBuilder()
    .appendSeconds().appendSuffix(" seconds ago\n")
    .appendMinutes().appendSuffix(" minutes ago\n")
    .appendHours().appendSuffix(" hours ago\n")
    .appendDays().appendSuffix(" days ago\n")
    .appendWeeks().appendSuffix(" weeks ago\n")
    .appendMonths().appendSuffix(" months ago\n")
    .appendYears().appendSuffix(" years ago\n")
    .printZeroNever()
    .toFormatter();

String elapsed = formatter.print(period);
System.out.println(elapsed);

これは今までに印刷されます

3秒前
51分前
7時間前
6日前
10ヶ月前
31年前

(咳、老人、咳)月と年も考慮に入れ、それらがゼロの場合は値を省略するように構成したことがわかります。

于 2010-02-01T20:29:15.763 に答える
20

単純な経過時間にはPrettyTimeを使用します。

@sfusseneggerが答えたようにHumanTimeを試し、 JodaTimePeriodを使用しましたが、私が見つけた人間が読める経過時間の最も簡単でクリーンな方法はPrettyTimeライブラリでした。

入力と出力の簡単な例をいくつか示します。

5分前

DateTime fiveMinutesAgo = DateTime.now().minusMinutes( 5 );

new PrettyTime().format( fiveMinutesAgo.toDate() );

// Outputs: "5 minutes ago"

少し前に

DateTime birthday = new DateTime(1978, 3, 26, 12, 35, 0, 0);

new PrettyTime().format( birthday.toDate() );

// Outputs: "4 decades ago"

注意:ライブラリのより正確な機能をいじってみましたが、おかしな結果が得られるため、注意して使用し、生命を脅かすプロジェクトでは使用しないでください。

JP

于 2014-08-16T20:38:55.327 に答える
11

これは PeriodFormatter で行うことができますが、他の回答のように独自の PeriodFormatBuilder を作成する必要はありません。あなたの場合に適している場合は、デフォルトのフォーマッタを使用できます。

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))

(同様の質問に対するこの回答へのヒント、見つけやすくするためにクロス投稿しています)

于 2014-02-07T11:53:10.290 に答える
8

私がかなり満足しているHumanTimeと呼ばれる小さなヘルパー クラスがあります。

于 2010-02-01T20:13:09.107 に答える