必要に迫られて作った“ジュリアン通日(Julian date)”変換関数(C言語)です。
必要に迫られて作った“ジュリアン通日(Julian date)”変換関数(C言語)です。
long toJulianDate(int year, int month, int mday) {
int a = (14 - month) / 12;
int y = year + 4800 - a;
int m = month + 12 * a - 3;
return mday + y * 365 - 32045
+ int((153 * m + 2) / 5)
+ int(y / 4) - int (y / 100) + int (y / 400);
}
void toYMD(long jdate, int& year, int &month, int &mday) {
int j = jdate + 32044;
int g = j / 146097;
int dg = j % 146097;
int c = (dg / 36524 + 1) * 3 / 4;
int dc = dg - c * 36524;
int b = dc / 1461;
int db = dc % 1461;
int a = (db / 365 + 1) * 3 / 4;
int da = db - a * 365;
int y = g * 400 + c * 100 + b * 4 + a;
int m = (da * 5 + 308) / 153 - 2;
int d = da - (m + 4) * 153 / 5 + 122;
year = y - 4800 + (m + 2) / 12;
month = (m + 2) % 12 + 1;
mday = d + 1;
}
JulianDateの7の剰余から曜日も求められます。 7で割った余りが0→月曜日,1→火曜日,…,6→日曜日,になります。