2010-08-13 5 views
1

나는 DB는 날짜별로 정렬 한 내 출력,이 같은 .. 행 사이의 경과 시간을 표시하고 싶습니다 ..두 시간의 차이를 계산하고 상대 결과를 표시하는 기능이 있습니까?

| 1/8/10/2010에 입력 # 1

| 2/9/2010 09:45에 등록일 # 2 | 이전 입국 이후 1 시간 11 분

| Entry # 3 on 08/11/2010 06:57 AM | 1 일 3 시간 12 분전 이전 입국 일부터

| Entry # 4 on 08/11/2010 08:34 PM | 13 시간 37 시간 전 출입 이후

| Entry # 5 on 09/11/2011 08:48 오후 | 일년 1개월 내가 getRelativeTimeSpanString (검토 한)하지만 1) 지금 & 2에서 계산 이전 항목

이후 팔분)는 접두사/접미사를 추가합니다.

사용자 지정 날짜 계산 방법을 만들고 조건을 모두 함께 사용하여 손질하는 것보다 쉬운 방법이 있습니까?

미리 감사드립니다.

답변

9

비슷한 작업을하는 안드로이드 SDK에서 아무것도 찾지 못했습니다 (Google은 GWT 프레임 워크에 하나를 포함 시켰습니다 ... 아마도 그 중 하나를 꺼낼 수있을 것입니다).

하지만 너무 어렵지 않기 때문에 비슷한 일을하는 DateUtils 클래스를 직접 작성했습니다. 2010 년 13 월 8 일 또는 10:30 PM과 같은 날짜가 아닌 '어제'또는 '2 분 전'과 같은 Gmail에서도 사용되는 친숙한 날짜 형식이 마음에 듭니다. 에 관하여 어떤 시간 차이에

내가

public static String getDifference(Date sessionStart, Date sessionEnd) { 
    if(sessionStart == null) 
     return "[corrupted]"; 

    Calendar startDateTime = Calendar.getInstance(); 
    startDateTime.setTime(sessionStart); 

    Calendar endDateTime = Calendar.getInstance(); 
    endDateTime.setTime(sessionEnd); 

    long milliseconds1 = startDateTime.getTimeInMillis(); 
    long milliseconds2 = endDateTime.getTimeInMillis(); 
    long diff = milliseconds2 - milliseconds1; 

    long hours = diff/(60 * 60 * 1000); 
    long minutes = diff/(60 * 1000); 
    minutes = minutes - 60 * hours; 
    long seconds = diff/(1000); 

    if (hours > 0) { 
     return hours + " hours " + minutes + " minutes"; 
    } else { 
     if (minutes > 0) 
      return minutes + " minutes"; 
     else { 
      return seconds + " seconds"; 
     } 
    } 
} 

.. 그리고 여기있는 따라 단위 테스트를 수행하면 올바른 기능 확인하기 위해 쓴 :

@Test 
    public void testGetDifference() { 
     // hours and minutes 
     Date startDate = DateUtils.createDateInstance("01.01.2010 12:00:00"); 
     Date endDate = DateUtils.createDateInstance("01.01.2010 13:12:00"); 

     String difference = DateUtils.getDifference(startDate, endDate); 
     assertNotNull(difference); 
     assertEquals("1 hours 12 minutes", difference); 

     // minutes 
     startDate = DateUtils.createDateInstance("01.01.2010 12:00:00"); 
     endDate = DateUtils.createDateInstance("01.01.2010 12:02:00"); 

     difference = DateUtils.getDifference(startDate, endDate); 
     assertNotNull(difference); 
     assertEquals("2 minutes", difference); 

     // seconds 
     startDate = DateUtils.createDateInstance("01.01.2010 12:00:00"); 
     endDate = DateUtils.createDateInstance("01.01.2010 12:00:15"); 

     difference = DateUtils.getDifference(startDate, endDate); 
     assertNotNull(difference); 
     assertEquals("15 seconds", difference); 

     difference = DateUtils.getDifference(null, endDate); 
     assertEquals("[corrupted]", difference); 
    } 

당신은 조정 할 수 있습니다 그것을 조금 또한 하드 코딩 된 문자열 ("시간", "분", ...)을 외부화하여 모든 것을 쉽게 현지화 할 수있게합니다 (문제인 경우).

참고로, 아마도 JodaTime lib를 살펴볼 필요가 있습니다. 어쩌면 그들은 비슷한 구현을 가지고 있을지 모르지만 나는 (나 자신)을 검증하지 않았다.

+0

감사합니다! ... 나는 함께 뭔가를 해킹해야 할 것이라고 생각했습니다. 귀하의 코드는 훌륭한 시작입니다 .. 단지 일, 주, 월, 년 코드를 추가해야하는 것처럼 보입니다. 예. 예! 장난! : p – kefs

+0

다음 클래스를 수정하여 사용했습니다. http://www.technojeeves.com/joomla/index.php/free/71-difference-between-two-dates-in-java – kefs

+0

Nice. 그냥 메모로. main() 명령을 사용하지 않고 단위 테스트를 작성하여 콘솔에 기록하십시오. 그렇게하면 코드가 올바르게 작동하는지 여부를 확인할 수 있습니다. :) – Juri

관련 문제