source: ntrip/trunk/BNC/src/timeutils.cpp@ 5809

Last change on this file since 5809 was 5746, checked in by mervart, 10 years ago
File size: 2.9 KB
Line 
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
18double djul(long jj, long mm, double tt) {
19 long ii, kk;
20 double djul ;
21
22 if( mm <= 2 ) {
23 jj = jj - 1;
24 mm = mm + 12;
25 }
26
27 ii = jj/100;
28 kk = 2 - ii + ii/4;
29 djul = (365.25*jj - fmod( 365.25*jj, 1.0 )) - 679006.0;
30 djul = djul + floor( 30.6001*(mm + 1) ) + tt + kk;
31 return djul;
32}
33
34/* -----------------------------------------------------------------------------
35 *
36 * Function : gpjd
37 *
38 * Purpose : computes the modified julian date (mjd) from
39 * gpsweek number and number of seconds past last
40 * saturday/sunday midnight
41 *
42 * Author : Z. Lukes
43 *
44 * Created : 13-OCT-2001
45 *
46 * Changes :
47 *
48 * ---------------------------------------------------------------------------*/
49
50double gpjd(double second, int nweek) {
51 double deltat;
52
53 // days since starting epoch of gps weeks (sunday 06-jan-80)
54
55 deltat = nweek*7.0 + second/86400.0 ;
56
57 // mod. julian date
58
59 return( 44244.0 + deltat) ;
60}
61
62/* -----------------------------------------------------------------------------
63 *
64 * Function : jdgp
65 *
66 * Purpose : compute number of seconds past midnight of last
67 * saturday/sunday and gps week number of current
68 * date given in modified julian date
69 *
70 * Author : Z. Lukes
71 *
72 * Created : 13-OCT-2001
73 *
74 * Changes :
75 *
76 * ---------------------------------------------------------------------------*/
77
78void jdgp(double tjul, double & second, long & nweek) {
79 double deltat;
80
81 deltat = tjul - 44244.0 ;
82
83 // current gps week
84
85 nweek = (long) floor(deltat/7.0);
86
87 // seconds past midnight of last weekend
88
89 second = (deltat - (nweek)*7.0)*86400.0;
90
91}
92
93/* -----------------------------------------------------------------------------
94 *
95 * Function : djul
96 *
97 * Purpose : compute year,month,day of month from
98 * modified julian date (mjd=jul. date-2400000.5)
99 *
100 * Author : Z. Lukes
101 *
102 * Created : 13-OCT-2001
103 *
104 * Changes :
105 *
106 * ---------------------------------------------------------------------------*/
107
108void jmt(double djul, long& jj, long& mm, double& dd) {
109 long ih, ih1, ih2 ;
110 double t1, t2, t3, t4;
111
112 t1 = 1.0 + djul - fmod( djul, 1.0 ) + 2400000.0;
113 t4 = fmod( djul, 1.0 );
114 ih = long( (t1 - 1867216.25)/36524.25 );
115 t2 = t1 + 1 + ih - ih/4;
116 t3 = t2 - 1720995.0;
117 ih1 = long( (t3 - 122.1)/365.25 );
118 t1 = 365.25*ih1 - fmod( 365.25*ih1, 1.0 );
119 ih2 = long( (t3 - t1)/30.6001 );
120 dd = t3 - t1 - (int)( 30.6001*ih2 ) + t4;
121 mm = ih2 - 1;
122
123 if ( ih2 > 13 ) mm = ih2 - 13;
124
125 jj = ih1;
126
127 if ( mm <= 2 ) jj = jj + 1;
128
129}
Note: See TracBrowser for help on using the repository browser.