2012-04-14 109 views
-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(time>=1440)(如果我以分鐘爲單位,可以通過time/1000*60*60完成);我應該怎麼做幾分鐘,幾小時,& c。?

根據這裏給出的建議是我寫的。任何改進建議?

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; 
     } 
    } 

回答

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接口與一個「只是爲了測試」的實施和「基於系統時間」的實施和注入,當你爲了可測性,會有其他依賴性。有關詳細信息,請參見Kevin Bourrillion's blog post about pure functions