2014-05-11 3 views
1

MySQL에서 검색 한 날짜와 현재 날짜/시간을 비교하려고합니다.Android : 날짜 비교

내가 원하는 원하는 효과는 이것이다 :

Date is Recent (Less than an hour)    | 0 
Date is An Hour Ago (1-2 Hours before now)  | 1 
Date is Several Hours Ago (2-8 Hours before now) | 2 
Date is Yesterday (a day ago)     | 3 
Date is Recent (More than a day ago)    | 4 

설명하려면이 방법은 선택으로 0-4 (포함) 사이의 숫자를 반환합니다.

현재 아래 코드가 엉망입니다.하지만 누군가가 더 좋은 방법을 제안 할 수 있습니까?

compareDate 방법 :

private int compareDate(Date date1) 
{ 
    long daysAgo = getDaysAgo(date1); 

    if(daysAgo == 0) 
    { 
     //Check the hours 

     int choice = getMinAgo(date1); 

     //Code for "Minutes Ago" 
     if(choice == 0) 
     { 
      return 0; 
     } 

     //Code for "An Hour Ago" 
     else if(choice == 1) 
     { 
      return 1; 
     } 

     //Code for "Several Hours Ago" 
     else if(choice == 2) 
     { 
      return 2; 
     } 

     else return -1; 

    } 

    else if (daysAgo == 1) 
    { 
     //"Code" for "Yesterday" is 3 
     return 3; 
    } 

    else 
    { 
     //"Code" for "Several days ago" is 4 
     return 4; 
    } 
} 

getDaysAgo 방법

private long getDaysAgo(Date date) 
{ 
    long days = (new Date().getTime() - date.getTime())/DAYS_IN_MILLISEC; 

    return days; 
} 

getMinAgo 방법

private int getMinAgo(Date date) 
{ 
    long hourAgo = 60; 
    long twoHourAgo = hourAgo*2; 
    long eightHourAgo = hourAgo*8; 

    Date dateHourAgo = new Date(date.getTime() - hourAgo*60*1000); 
    Date dateTwoHourAgo = new Date(date.getTime() - twoHourAgo*60*1000); 
    Date dateEightHourAgo = new Date(date.getTime() - eightHourAgo*60*1000); 

    //Between 0-1 Hours Ago 
    if(date.before(dateHourAgo)) 
    { 
     return 0; 
    } 

    //Between 1-2 Hours Ago 
    else if(date.after(dateHourAgo) && date.before(dateTwoHourAgo)) 
    { 
     return 1; 
    } 

    else if(date.after(dateTwoHourAgo) && date.before(dateEightHourAgo)) 
    { 
     return 2; 
    } 

    return -1; 
} 
+0

내 솔루션을 사용해 보셨습니까? – janzoner

+0

현재 코드에 액세스 할 수 없지만 그렇게 할 때 시도해보고 작동하는지 확인합니다. 만약 그렇다면, 나는 당신의 대답을 받아 들일 것으로 표시 할 것입니다. – SlashTag

답변

2

는 아래의 코드는이 메소드를 구현하는 방법을 예입니다 (나는 그것을 getChoice라고 부름). 나는 그것을 테스트하고 잘 작동합니다. 확실하지 않은 것이 있으면 주저하지 말고 물어보십시오.

import java.util.Date; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Date testedDate = new Date(114, 4, 10, 22, 0, 0); 
     TextView tv = (TextView)findViewById(R.id.textView1); 

     int i = getChoice(testedDate); 
     String mOutput = String.valueOf(i); 

     tv.setText("The output is: " + mOutput); 

    } 

    private int getChoice(Date d) { 
     long mTime = new Date().getTime() - d.getTime(); 

     if(mTime <= 3600000) return 0; // less than an hour 
     if(mTime <= 7200000) return 1; // 1-2 hours before now 
     if(mTime <= 28800000) return 2; // 2-8 hours before now 
     if(mTime <= 86400000) return 3; // a day ago 
     return 4; // more than a day ago 
    } 

} 
+0

완벽하게 작동했습니다. 도움을 주셔서 대단히 감사합니다. 내가 그것을 지나치게 복잡하게하고 있었던 것처럼 보인 단다). 우수 답변으로 표시되었습니다. – SlashTag

+0

@SlashTag 환영합니다. 우리 모두를 위해 여전히 개선의 여지가 많이 있습니다 :) – janzoner

1

는 차라리 코드를 많이 작성하는 것보다, MySQL의에서 정수 값을 반환합니다.

(당신이 날짜 값이 미래에, 또는 날짜가 NULL 인 경우 경우 반환하려는 무엇 명확하지가.)

SELECT t.datetime_col 
    , CASE 
     WHEN t.datetime_col > NOW() THEN -1      -- in the future 
     WHEN t.datetime_col >= NOW() - INTERVAL 1 HOUR THEN 0 -- within the last hour 
     WHEN t.datetime_col >= NOW() - INTERVAL 2 HOUR THEN 1 -- within the last two hours 
     WHEN t.datetime_col >= NOW() - INTERVAL 8 HOUR THEN 2 -- within the last eight hours 
     WHEN t.datetime_col >= NOW() - INTERVAL 24 HOUR THEN 3 -- within the past day 
     WHEN t.datetime_col < NOW() - INTERVAL 24 HOUR THEN 4 -- older than a day 
     END AS recent 
    , ... 
    FROM ...