![article thumbnail image](https://blog.kakaocdn.net/dn/oEYm4/btqy6UNTEAu/WKEmPnLPKhB4DcAf9AlXa1/img.png)
Date 객체를 Julian Date로 변경해야 할 일이 생겼는데, 늘 신세를 지고 있는 Stack Overflow를 포함하여 여기저기 구글링해 봐도 내가 원하는 게 보이지 않았다...... 결과값이 두 개로 나뉘던데 사실 그 두 개가 무슨 차이가 있는지도 잘 모르겠다. 그러던 중 감사하게도 하단에 첨부한 블로그에서 수식을 발견해서 적용해 보았고, 그 결과가 성공적이었기에 기록한다!
public int toJulian(Date d) {
final Calendar c = Calendar.getInstance();
c.setTime(d);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DAY_OF_MONTH);
//Log.i(TAG, "year=" + year + ", month=" + month + ", day=" + day);
int a = (14 - month) / 12;
int y = year + 4800 - a;
int m = month + (12 * a) - 3;
int JD = day + (((153 * m) + 2) / 5) + (365 * y) + (y / 4) - (y / 100) + (y / 400) - 32045;
//Log.i(TAG, "JD=" + JD);
return JD;
}
Date의 getYear()를 하니까 119가 나와서 찾아보니까 현재 연도에서 1900을 빼서 반환해 주는 메소드라고 한다. getYear() + 1900으로 처리해도 됐지만, Deprecated되었다고 취소선이 뜨는 게 거슬려서 Calendar를 사용하였다.
※ 여기서 Calendar의 get(Calendar.MONTH)는 인덱스(0~11)를 반환하기 때문에 월(1~12)을 가져오려면 +1 해 줘야 하는 것에 주의한다!
AAVSO - Julian Date (JD) Calculator and Calendars(https://www.aavso.org/jd-calculator)에서 계산이 맞는지 확인할 수 있다. 나는 UTC 기준으로 다뤄야 하기 때문에 따로 시차를 처리해 주지 않았다.
참고: https://smith3015.blogspot.com/2012/12/gregorian-julian-date.html
[Gregorian -> Julian Date]그레고리 달력을 줄리안 달력으로 변환하기
정보화 업무, 유비쿼터스, 아이폰 개발, 센서, 기술 등에 대한 블로그입니다.
smith3015.blogspot.com