1 | /* -----------------------------------------------------------------------------
|
---|
2 | *
|
---|
3 | * Function : djul
|
---|
4 | *
|
---|
5 | * Purpose : computes the modified julian date (mjd) from
|
---|
6 | * year, month and day
|
---|
7 | *
|
---|
8 | * Author : Z. Lukes
|
---|
9 | *
|
---|
10 | * Created : 13-OCT-2001
|
---|
11 | *
|
---|
12 | * Changes :
|
---|
13 | *
|
---|
14 | * ---------------------------------------------------------------------------*/
|
---|
15 |
|
---|
16 | #include <math.h>
|
---|
17 |
|
---|
18 | #ifndef NO_CVS_HEADER
|
---|
19 | static const char *const cvsid = "$Header: /home/cvs/cvsroot/gpss_src/cpp/src/common/rtgnss/timeutils.cpp,v 1.1 2007/04/02 16:30:26 cvs Exp $";
|
---|
20 | #endif
|
---|
21 |
|
---|
22 | double djul(long jj, long mm, double tt) {
|
---|
23 | long ii, kk;
|
---|
24 | double djul ;
|
---|
25 |
|
---|
26 | if( mm <= 2 ) {
|
---|
27 | jj = jj - 1;
|
---|
28 | mm = mm + 12;
|
---|
29 | }
|
---|
30 |
|
---|
31 | ii = jj/100;
|
---|
32 | kk = 2 - ii + ii/4;
|
---|
33 | djul = (365.25*jj - fmod( 365.25*jj, 1.0 )) - 679006.0;
|
---|
34 | djul = djul + floor( 30.6001*(mm + 1) ) + tt + kk;
|
---|
35 | return djul;
|
---|
36 | }
|
---|
37 |
|
---|
38 | /* -----------------------------------------------------------------------------
|
---|
39 | *
|
---|
40 | * Function : gpjd
|
---|
41 | *
|
---|
42 | * Purpose : computes the modified julian date (mjd) from
|
---|
43 | * gpsweek number and number of seconds past last
|
---|
44 | * saturday/sunday midnight
|
---|
45 | *
|
---|
46 | * Author : Z. Lukes
|
---|
47 | *
|
---|
48 | * Created : 13-OCT-2001
|
---|
49 | *
|
---|
50 | * Changes :
|
---|
51 | *
|
---|
52 | * ---------------------------------------------------------------------------*/
|
---|
53 |
|
---|
54 | double gpjd(double second, int nweek) {
|
---|
55 | double deltat;
|
---|
56 |
|
---|
57 | // days since starting epoch of gps weeks (sunday 06-jan-80)
|
---|
58 |
|
---|
59 | deltat = nweek*7.0 + second/86400.0 ;
|
---|
60 |
|
---|
61 | // mod. julian date
|
---|
62 |
|
---|
63 | return( 44244.0 + deltat) ;
|
---|
64 | }
|
---|
65 |
|
---|
66 | /* -----------------------------------------------------------------------------
|
---|
67 | *
|
---|
68 | * Function : jdgp
|
---|
69 | *
|
---|
70 | * Purpose : compute number of seconds past midnight of last
|
---|
71 | * saturday/sunday and gps week number of current
|
---|
72 | * date given in modified julian date
|
---|
73 | *
|
---|
74 | * Author : Z. Lukes
|
---|
75 | *
|
---|
76 | * Created : 13-OCT-2001
|
---|
77 | *
|
---|
78 | * Changes :
|
---|
79 | *
|
---|
80 | * ---------------------------------------------------------------------------*/
|
---|
81 |
|
---|
82 | void jdgp(double tjul, double & second, long & nweek) {
|
---|
83 | double deltat;
|
---|
84 |
|
---|
85 | deltat = tjul - 44244.0 ;
|
---|
86 |
|
---|
87 | // current gps week
|
---|
88 |
|
---|
89 | nweek = (long) floor(deltat/7.0);
|
---|
90 |
|
---|
91 | // seconds past midnight of last weekend
|
---|
92 |
|
---|
93 | second = (deltat - (nweek)*7.0)*86400.0;
|
---|
94 |
|
---|
95 | }
|
---|
96 |
|
---|
97 | /* -----------------------------------------------------------------------------
|
---|
98 | *
|
---|
99 | * Function : djul
|
---|
100 | *
|
---|
101 | * Purpose : compute year,month,day of month from
|
---|
102 | * modified julian date (mjd=jul. date-2400000.5)
|
---|
103 | *
|
---|
104 | * Author : Z. Lukes
|
---|
105 | *
|
---|
106 | * Created : 13-OCT-2001
|
---|
107 | *
|
---|
108 | * Changes :
|
---|
109 | *
|
---|
110 | * ---------------------------------------------------------------------------*/
|
---|
111 |
|
---|
112 | void jmt(double djul, long& jj, long& mm, double& dd) {
|
---|
113 | long ih, ih1, ih2 ;
|
---|
114 | double t1, t2, t3, t4;
|
---|
115 |
|
---|
116 | t1 = 1.0 + djul - fmod( djul, 1.0 ) + 2400000.0;
|
---|
117 | t4 = fmod( djul, 1.0 );
|
---|
118 | ih = long( (t1 - 1867216.25)/36524.25 );
|
---|
119 | t2 = t1 + 1 + ih - ih/4;
|
---|
120 | t3 = t2 - 1720995.0;
|
---|
121 | ih1 = long( (t3 - 122.1)/365.25 );
|
---|
122 | t1 = 365.25*ih1 - fmod( 365.25*ih1, 1.0 );
|
---|
123 | ih2 = long( (t3 - t1)/30.6001 );
|
---|
124 | dd = t3 - t1 - (int)( 30.6001*ih2 ) + t4;
|
---|
125 | mm = ih2 - 1;
|
---|
126 |
|
---|
127 | if ( ih2 > 13 ) mm = ih2 - 13;
|
---|
128 |
|
---|
129 | jj = ih1;
|
---|
130 |
|
---|
131 | if ( mm <= 2 ) jj = jj + 1;
|
---|
132 |
|
---|
133 | }
|
---|