2012-04-14 107 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