컴퓨터공부/Kotlin & Java

현재 날짜 추출하기 및 날짜 간격 확인하기

achivenKakao 2018. 1. 4. 01:50

날짜 관련된 것은 신경 안썼는데..

이게.. 들여다 본것 정리를 하는게 좋을것 같다.


날짜를 구할 때는 Calendar.YEAR, Calendar.MONTH 과 같은 매크로? 같은걸 써줘야 쉽게 날짜를 구할 수 있다. 

아래 함수와 같이 Calendar.set()를 통하여 날짜를 생성할 수 있다. 



public Date getFirstDayOfWeek(){

// 현재 날짜를 구한다
Calendar cal = Calendar.getInstance();

// cal.setTimeZone(TimeZone.getTimeZone("GMT"));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
// int days = cal.get(Calendar.DAY_OF_MONTH);
// int days = cal.get(Calendar.DAY_OF_WEEK); // 요일
int days = cal.getFirstDayOfWeek();

// Calendar.set()를 통하여 원하는 날짜를 생성할 수 있다
cal.set(year, month, days);

Date date = cal.getTime();

return date;

    } 



다음은 현재 주의 첫날 부터 며칠이 지났는지 확인하는 코드이다.

  (참고, GMT나 기준 시간의 변경(예 : 매일 5시를 다음날로 정할 경우)이 있을 경우 추가 작업이 필요하다.)



public class MainActivity extends AppCompatActivity {

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

Calendar cal = Calendar.getInstance();

Date date1 = cal.getTime();
Date date2 = getFirstDayOfWeek();

// cal.getFirstDayOfWeek(); 는 숫자만 달랑 넘긴다. 그래서 날짜로 표현하려면 추가 작업이 필요해서 안쓰게 된다.

System.out.println("How many days were passed from the first day of week : " + getDifferenceDays(date2, date1));
}


public Date getFirstDayOfWeek(){

// 현재 날짜를 구한다
Calendar cal = Calendar.getInstance();

// cal.setTimeZone(TimeZone.getTimeZone("GMT"));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
// int days = cal.get(Calendar.DAY_OF_MONTH);
// int days = cal.get(Calendar.DAY_OF_WEEK); // 요일
int days = cal.getFirstDayOfWeek();

// Calendar.set()를 통하여 원하는 날짜를 생성할 수 있다
cal.set(year, month, days);

Date date = cal.getTime();

return date;
}

public long getDifferenceDays(Date d1, Date d2) {
long diff = d2.getTime() - d1.getTime();

// or float days = (diff / (1000*60*60*24)); // 1 day = 1000 * 60 * 60 * 24
return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);

/*
Since there have been some discussions regarding the correctness of this code: it does indeed take care of leap years.
However, the TimeUnit.DAYS.convert function loses precision since milliseconds are converted to days (see the linked doc for more info).
If this is a problem, diff can also be converted by hand:

float days = (diff / (1000*60*60*24));
*/
}
} 

결과(1월 4일 기준) ; How many days were passed from the first day of week : 3

 



참고 : https://stackoverflow.com/questions/20165564/calculating-days-between-two-dates-with-java

  https://developer.android.com/reference/java/util/Calendar.html