-1

メッセージが投稿されてから経過した時間を表示する必要があります。publisheddate入力として受け取り、経過時間を返すメソッドを書いています。

d1.gettime-pubdate.gettime=time in milliseconds.

私はif条件を書いています

if time==something concat days ago,
elseif hours ago
elseif min ago
elseif seconds ago
elseif justnow.

if 条件には何を含める必要がありますか? たとえば、日はif(time>=1440)次のようになります(日付を分単位で取得する場合、これは で実行できますtime/1000*60*60)。分、時間など何をすればよいですか?

ここで与えられたアドバイスに基づいて、私が書いたものです。改善の提案はありますか??

public static String TimeElapsed(final Date date)

{  

       Date Interval=new Date();
       DateTime Interval1 = new DateTime();//Converting java time to joda time
       Interval1 = new DateTime(date);
       DateTime Interval2 = new DateTime();
       Interval2=new DateTime(Interval);

       //Now we have two joda time instances

       Duration dd=new Duration(Interval1,Interval2);
      //get duration between     given            and current time
       Duration rd1=new Duration(1000);//seconds
       Duration rd2=new Duration(60000);//minutes
       Duration rd7=new Duration(60000*2);//2minutes
       Duration rd3=new Duration(3600000);//hours
       Duration rd6=new Duration(3600000*2);//2hours
       Duration rd4=new Duration(86400000);//days
       Duration rd5=new Duration(86400000*2);//2days
       if(dd.isShorterThan(rd1)){
           String k="just now";
           return k;
       }
       else if(dd.isEqual(rd1)){
           String k="just now";
           return k;

       }
       else if(dd.isLongerThan(rd1)&& dd.isShorterThan(rd2))
       {
           String k=dd.getStandardSeconds()+""+" seconds ago";
           return k;
       }
       else if(dd.isEqual(rd2) || dd.isShorterThan(rd7)){
           String k=dd.getStandardMinutes()+""+" minute ago";
           return k;
       }
       else if(dd.isLongerThan(rd2) && dd.isShorterThan(rd3)){
           String k=dd.getStandardMinutes()+""+" minutes ago";
           return k;
       }
       else if(dd.isEqual(rd3) || dd.isShorterThan(rd6))
       {
           String k=dd.getStandardHours()+""+" hour ago";
           return k;
       }
       else if(dd.isLongerThan(rd3) && dd.isShorterThan(rd4)){
            String k=dd.getStandardHours()+""+"hours ago";
            return k;
       }
       else if(dd.isEqual(rd4) || dd.isShorterThan(rd5) ) {
           String k=dd.getStandardDays()+""+" day ago";
           return k;
       }

       else if(dd.isLongerThan(rd4)){
           String k=dd.getStandardDays()+""+" days ago";
           return k;
       }
       else{
           String k="";
           return k;
       }
   }
4

2 に答える 2

2

Joda -Timeを使用するというwrschneider99の提案に同意しますが、IMOは、数値などのより人間中心の何かではなく、一定のミリ秒数である経過時間について話していると仮定すると、Durationではなくを使用する必要があります。数ヶ月の。Interval

私は次のようなものを提案します:

// Assuming this really is a constant...
private static final Duration POST_DURATION = Duration.standardDays(2);

// Then elsewhere...
Instant expiry = post.getTime().plus(POST_DURATION);
// See below
Instant now = clock.now();

if (now.isAfter(expiry)) {
    ...
}

Clock「テスト専用」の実装と「システム時間に基づく」実装のある種のインターフェースを使用し、他の依存関係と同じように、テスト容易性のためにそれを注入することに注意してください。詳細については、純粋関数に関するKevinBourrillionのブログ投稿を参照してください。

于 2012-04-14T17:53:00.900 に答える
1

Period.normalizedStandardJoda Time のメソッドのようなものを探していると思います。

参照: ピリオドから文字列へ

于 2012-04-14T17:38:56.853 に答える