mess822x 1.23
mess822x
Loading...
Searching...
No Matches
caldate_fmjd.c
Go to the documentation of this file.
1#include "caldate.h"
2
3void caldate_frommjd(struct caldate *cd,long day,int *pwday,int *pyday)
4{
5 long year;
6 long month;
7 int yday;
8
9 year = day / 146097L;
10 day %= 146097L;
11 day += 678881L;
12 while (day >= 146097L) { day -= 146097L; ++year; }
13
14 /* year * 146097 + day - 678881 is MJD; 0 <= day < 146097 */
15 /* 2000-03-01, MJD 51604, is year 5, day 0 */
16
17 if (pwday) *pwday = (day + 3) % 7;
18
19 year *= 4;
20 if (day == 146096L) { year += 3; day = 36524L; }
21 else { year += day / 36524L; day %= 36524L; }
22 year *= 25;
23 year += day / 1461;
24 day %= 1461;
25 year *= 4;
26
27 yday = (day < 306);
28 if (day == 1460) { year += 3; day = 365; }
29 else { year += day / 365; day %= 365; }
30 yday += day;
31
32 day *= 10;
33 month = (day + 5) / 306;
34 day = (day + 5) % 306;
35 day /= 10;
36 if (month >= 10) { yday -= 306; ++year; month -= 10; }
37 else { yday += 59; month += 2; }
38
39 cd->year = year;
40 cd->month = month + 1;
41 cd->day = day + 1;
42
43 if (pyday) *pyday = yday;
44}
void caldate_frommjd(struct caldate *cd, long day, int *pwday, int *pyday)
Definition: caldate_fmjd.c:3
Definition: caldate.h:4
int day
Definition: caldate.h:7
long year
Definition: caldate.h:5
int month
Definition: caldate.h:6