16

2つの日付の間で経過した時間を計算する必要があります。

ここでの落とし穴は、YouTubeがビデオコメントのタイムスタンプで行うように、それを表示する必要があるということです。つまり、それを最大の尺度で示すことです。

例えば、

  • 時刻が50秒前の場合、50秒前と表示されます。
  • 時間が1分を超える場合は、1分前/10分前などと表示されます。
  • 時差が1時間30分である場合、1時間前と表示されます。
  • 時間が1週間前と言うよりも1週間半なら。
  • 時間が1か月以上の場合は、1か月前/2か月前などと表示されます。
  • などなど。

では、これを処理するための最良の方法は何ですか?このようなものを返すcaseorステートメントを使用してメソッドを作成する必要がありますか?ifそれとも、より良いアプローチがありますか(おそらく、すでにそのようなことをしているライブラリ)?

4

6 に答える 6

42

DateUtils.getRelativeTimeSpanString (long time, long now, long minResolution)を使用します。timeは開始時刻、nowは終了時刻 (ミリ秒単位) です。「数秒前」を報告するには、minResolution をゼ​​ロに設定します。

例:

String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0);
// result = "5 seconds ago"
于 2011-05-30T15:02:08.907 に答える
5
 date1.getTime() - date2.getTime() 

これにより、2 つの日付の間の時間がミリ秒単位で返されます。それを表示したいものに変換するだけです(例:時間分秒)

于 2011-05-30T14:59:18.443 に答える
3

Android では、これを使用します: http://developer.android.com/reference/android/text/format/DateUtils.html#getRelativeTimeSpanString%28android.content.Context,%20long,%20boolean%29

于 2011-05-30T15:02:52.467 に答える
2

PrettyTimeをご覧ください。

また、Java で日付/時刻に関連することをしたいときはいつでも、Joda Timeを確認する必要があります。今それをしてください、あなたは後で私に感謝します.

于 2011-05-30T15:01:06.810 に答える
0

あなたのニーズは非常に具体的であり、箱から出してすぐに問題を解決するライブラリを知りません。ただし、問題はそれほど複雑ではなく、「if」でいっぱいの小さな関数でうまくいくはずです。もちろん、Joda Time のような優れた日付ライブラリは、コードをきれいに保つのに役立ちます。誰がグレゴリオ暦を使いたい!?

于 2011-05-30T15:05:29.220 に答える
-1

カスタム ルールのセットがあり、ルールを選択するアルゴリズムは 2 つのタイムスタンプ間の秒単位の時間に基づいているようです。最も簡単な方法は、一連の if/else if ステートメントでルールを処理することです。

 private String getTimeAsString(int seconds) {
   if (seconds < 60) {     // rule 1
      return String.format("%s seconds ago", seconds);
   } else if (seconds < 3600) {  // rule 2
      return String.format("%s minutes ago", seconds/60);
   } // ... and so on
 }
于 2011-05-30T15:03:26.513 に答える