你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

GPS,UTC和本地时间的显示器

[复制链接]
XinLiYF 发布时间:2018-2-2 21:41
GPS,UTC和本地时间的显示器' a) t7 f9 M8 s/ I- a# S7 Z; e

5 s- Z) ~! F( }4 Q2 B* T! B8 s: `转载来源:GPS,UTC和本地时间的显示器
1 W' }! D# F# y' V7 O
2 s# a) V4 c3 G5 u; I" h! VGitHub仓库:http://github.com/XinLiGitHub/GpsUtcAndLocalTime
5 }; C" b- x3 o9 y. vPS:博文不再更新,后续更新会在GitHub仓库进行。& V7 W+ ^8 O6 `5 Z: j8 S

+ l0 U0 r% {, J# |$ q' D# O      GPS,UTC和本地时间的显示器。程序中涉及到朱利安日期的转换,详细介绍见维基百科[Julian day](http://en.wikipedia.org/wiki/Julian_day)。4 T- d# ]% C' a5 b' b& \

4 L0 Q4 f2 i+ h& x& w3 r. N- w4 u1,开发环境2 s  r* |6 I7 [) |- z
      1,操作系统:Windows 10 专业版
( t5 H& M: i* D! {# r+ a5 n% e  e9 k      2,IDE:Visual Studio 2015 专业版/ |) ^3 J2 k7 F8 `; _4 G
8 [0 b$ G3 ]4 y1 x8 m2 l5 U
2,程序源码9 B$ H0 {; m$ W5 W' x/ a
      DateTime.h文件
% U! T& D$ |7 ?( V& u2 Z7 e, I; h' I" o! l! u0 Q" J
  1. /****************************************************************7 e  F9 N9 F9 {: ~6 V
  2. * Copyright (C) 2017, XinLi, all right reserved.% j" ?0 r; S2 T) V/ N+ D4 H4 D
  3. * File name:    DateTime.h" G; J9 U8 [: y; \
  4. * Date:         2017.10.179 ^2 I: R8 K) @5 a4 ?; X8 M2 K
  5. * Description:  Date and time module header file.
    - d/ h$ I- h: R5 M7 i
  6. *****************************************************************/. o' _: l4 T2 L: x7 P3 o# ~3 L! t4 S  {
  7. 8 K2 l" o, f$ W2 h, U7 S% G; j
  8. #ifndef __DATETIME_H
    ) E% C) q) b* G; R3 T8 P8 U4 U
  9. #define __DATETIME_H
    / }2 C/ u/ ~+ z. Z+ h) \

  10. 0 y; C% P. u5 U/ e
  11. /****************************************************************2 I  }$ X4 W9 }% |
  12. *                        Header include4 F: a0 J6 Y9 M5 J: L) I& C7 ^4 |
  13. *****************************************************************/' z% a$ V: Y: N- B; Q

  14. ! i0 b& [  v! `2 J* M/ {2 T
  15. # o' Q/ e$ e7 x
  16. /****************************************************************5 J. \$ n% Q4 S$ I+ m8 H; f$ o  ?
  17. *                       Macro definition
    8 [5 q6 i! o/ I+ H3 S" q4 r# d. X
  18. *****************************************************************/9 Y: @0 i$ n/ V) K( l' [7 x9 n
  19. + g- f3 y+ L1 t7 d

  20. 7 x  g5 m9 ~( J
  21. /****************************************************************
    " ]$ V7 W2 ~. Z6 _, h- [
  22. *                       Type definition
    + ~! L( E4 S( ?% C6 J3 |9 _' ~
  23. *****************************************************************/
    8 h/ |$ q; S! p: ?
  24. 8 m7 @" R5 R6 S$ Z; z
  25. - E. I3 I: s* I. P8 Y
  26. /****************************************************************
      u( k- T  n* m1 l! a# Y/ V0 v
  27. *                     Structure definition
    7 W, R0 }/ f# v1 h3 l9 ?
  28. *****************************************************************/* j# [2 H. L4 H  s
  29. typedef struct
    7 d! W! c" F# P9 i
  30. {  @# e, W1 [& [$ m% R
  31.   int year;# ~; A5 t  E- Y
  32.   int month;
    ; D4 @5 T( t" ^8 J" L# F; \
  33.   int day;5 E4 m8 I, Z8 n+ B# G# q2 ]5 U
  34.   int hour;
    : w0 V  P+ ^5 \& \3 v; F1 h
  35.   int minute;
    ' H* @2 S0 e$ \' }5 K
  36.   int second;4 g, U3 f5 F2 E. N
  37. }DateTime;6 w- _3 M, r3 A
  38. 9 s, U3 T8 w& n4 W' \, [2 ^
  39. typedef struct( W" M4 K- y1 p( x. M) A" e$ Z
  40. {3 s) B6 H; F- f" P* ?' K5 _
  41.   int week;
    ( L5 O3 D9 r' S( G4 P
  42.   int second;  d' C/ b& r! ^' |8 C) B/ s* e
  43. }GpsWeekSecond;. k) g/ L  `9 p& z; V  B

  44. & {4 C5 }& u2 C9 Q% B1 n
  45. . B2 x, I) ^4 l0 S/ g$ m" q& B) R
  46. #ifdef __cplusplus
    4 u) b! l! r8 ?2 p$ a! Q' l
  47. extern "C" {
    7 L: P1 A5 Z: A6 N0 W2 G
  48. #endif  /* __cplusplus */8 A# N$ C" y8 ^& o) n( \
  49. 6 H& S7 p  n, l1 `! s. u1 w
  50. /****************************************************************, d! o( ]( W8 [5 b" B
  51. *                     Variable declaration
    . D* P! d3 G/ q, l
  52. *****************************************************************/
    ; T' c( _2 ]" r: I
  53. ' Z9 T# p% ]2 R4 s# X8 v1 T& Y6 L
  54. 1 x- C, v- C0 ^1 z
  55. /****************************************************************7 u6 _; H9 F4 z- f
  56. *                     Function declaration2 T% y, V0 L; }4 ]; J# A" @# M
  57. *****************************************************************/
    * _# t" s3 U$ F, U5 p) v$ C
  58. DateTime GregorianCalendarDateAddYear(DateTime time, int year);
    ( ^1 E' m* W9 K8 Y% b: v+ A/ m
  59. DateTime GregorianCalendarDateAddMonth(DateTime time, int month);
    ) {5 l0 T$ p: N
  60. DateTime GregorianCalendarDateAddWeek(DateTime time, int week);, ~$ S, a. u3 o! E0 `, j" b. \
  61. DateTime GregorianCalendarDateAddDay(DateTime time, int day);+ ~  u% W7 O1 |/ T8 y3 ^
  62. DateTime GregorianCalendarDateAddHour(DateTime time, int hour);
    9 H9 b$ J9 y/ ]5 v
  63. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute);
    # R' P* O- m& N8 }
  64. DateTime GregorianCalendarDateAddSecond(DateTime time, int second);( C, {* I$ h. v. x2 |9 X: {
  65. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time);# g  ^7 F1 D0 }9 u/ v* ?2 A: ]8 t" \
  66. double GregorianCalendarDateToJulianDate(DateTime time);4 I8 w, v+ k$ X( J$ F/ b, V& T
  67. double GregorianCalendarDateToModifiedJulianDate(DateTime time);( A  W6 x7 d) p: f$ X
  68. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year);/ h, e* s& Q3 k6 \, K
  69. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month);
    # [& h8 m5 b/ C/ \/ m7 N
  70. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week);3 p' P1 s& N& s
  71. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day);
    % r& Z* p8 F! M' w6 j5 t8 O
  72. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour);7 s6 m- {% i8 g4 v3 g
  73. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute);( Q* V2 M5 q' I- b( G* ~2 i: Q
  74. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second);$ ^& b( S; Y+ E* e  e
  75. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time);
    ( _9 T" l$ V: d  ?! r4 \: _
  76. double GpsWeekSecondToJulianDate(GpsWeekSecond time);
    ; r2 E4 O$ V2 g9 R* D: c/ J
  77. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time);
    - U1 N2 `6 p) s
  78. double JulianDateAddYear(double jd, int year);/ }) O$ o1 t- g2 Z  ^
  79. double JulianDateAddMonth(double jd, int month);
    ! y/ j3 A" b) N0 Q& q; ~4 ^
  80. double JulianDateAddWeek(double jd, int week);
    , R9 Z. ~  i! o; ~
  81. double JulianDateAddDay(double jd, int day);' N* D5 k! m5 M1 j) g' e
  82. double JulianDateAddHour(double jd, int hour);2 |+ S6 k* c4 {  }/ T
  83. double JulianDateAddMinute(double jd, int minute);
    : q2 h0 o  i# a& h
  84. double JulianDateAddSecond(double jd, int second);, [3 [* P+ ~: n; p, c5 k# b
  85. DateTime JulianDateToGregorianCalendarDate(double jd);
    + G: M' d( d% C" W7 ~) v
  86. GpsWeekSecond JulianDateToGpsWeekSecond(double jd);: j! k0 l6 `* J: {
  87. double JulianDateToModifiedJulianDate(double jd);* u$ `! z9 _$ D1 D8 G
  88. double ModifiedJulianDateAddYear(double mjd, int year);; P1 r! n* P1 K8 l) K' U- k
  89. double ModifiedJulianDateAddMonth(double mjd, int month);5 Z4 A  {4 t% @3 w1 s. o5 ]; N
  90. double ModifiedJulianDateAddWeek(double mjd, int week);* I; i7 q) N3 J- W3 V0 m
  91. double ModifiedJulianDateAddDay(double mjd, int day);* I+ y+ {) E9 F, o2 ?& i# b  x
  92. double ModifiedJulianDateAddHour(double mjd, int hour);
    + x6 b* s  v# f
  93. double ModifiedJulianDateAddMinute(double mjd, int minute);
    7 b5 ~2 p: R+ x/ w1 N$ j
  94. double ModifiedJulianDateAddSecond(double mjd, int second);1 N9 p9 ]. d% M$ ], f5 ~
  95. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd);
    4 I) K* ]( x* ]  @# K5 p
  96. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd);* [/ B# G6 y1 q6 t- M% h
  97. double ModifiedJulianDateToJulianDate(double mjd);
    # x, z1 g/ K8 \; E/ j7 f

  98. + k! R% F/ S  H' v% a
  99. #ifdef __cplusplus! g, {$ r  M0 m3 m4 K. Z6 Q
  100. }. A; E4 Q) L, w! k
  101. #endif  /* __cplusplus */
    . |4 B) o0 h  ^, L' `4 s: v! z

  102. 9 [% V- l1 W5 k7 ^4 J& H6 E/ j
  103. #endif  /* __DATETIME_H */
    8 [7 _* v, _4 ?- b1 j, J
复制代码

- F: K' ]" L  e3 h7 ~9 X! {8 |      DateTime.c文件
8 @" l5 M9 g3 ~8 _3 n4 D
  1. /****************************************************************
    + O# K& `# h% S; I+ g
  2. * Copyright (C) 2017, XinLi, all right reserved.
    9 Q: o* ~  `; Z) [0 V
  3. * File name:    DateTime.c' d( f) \3 l# O" ~3 T/ a+ N5 L
  4. * Date:         2017.10.17
    , X+ O. N" [9 Q8 C
  5. * Description:  Date and time module source file.
    2 I' g) b1 y2 G* r2 v. |
  6. *****************************************************************/* Q0 ~3 {, L6 H

  7. , k+ q  N0 |3 \% v
  8. /****************************************************************
    * o' U% ^; x1 }* o7 p& x  U, `
  9. *                        Header include6 k2 i0 U3 I2 N9 T5 M: r* C+ B+ s; G
  10. *****************************************************************/$ b$ r9 \7 D! U5 z) n
  11. #include "DateTime.h"& W( |1 F4 E$ g# L
  12. : K0 e# ~  t3 m
  13. /****************************************************************
    ) H8 U8 m- A6 o! l  J. S
  14. *                       Global variables
    ) S5 {. h# p6 L: ~
  15. *****************************************************************/
    # j! {) p7 _% o: o, |1 |

  16. 7 _; I6 i+ E3 \7 H

  17. . _, [  h2 l( |: S
  18. /****************************************************************
    / X3 Q; c2 c2 _5 Z  y
  19. *                     Function declaration
    % z. g. Y! I# Q5 ?
  20. *****************************************************************/
    " R) A0 K% {2 i/ F; }

  21. 4 R3 |0 _( _! @; O, A$ g9 u) R
  22. " \' e- K( L1 r( y+ s) ]4 H
  23. /****************************************************************
    9 n- F+ u3 C+ ?& E; ]( r2 t
  24. *                     Function definition7 k& A. h4 o% `5 Y* D3 x
  25. *****************************************************************/
    , V0 Z& q# _# P$ _) \& B5 f  }- f
  26. 6 b' h  z2 X! V. A6 l
  27. /****************************************************************
    ( I% ]9 \0 ~% L# _5 w
  28. * Function:    GregorianCalendarDateAddYear, N" _1 M2 k( T3 _
  29. * Description: Gregorian calendar date add year.
    4 C* y! |+ C( E8 H9 `7 Y
  30. * Input:       time: Gregorian calendar date.9 y& k( C! h& J3 i5 h& e* S8 X
  31. *              year: The number of year to add.
    # m+ q$ ?( \& H7 A7 H: }
  32. * Output:1 p1 s9 q9 l5 H! A6 o9 ?- s9 e& m
  33. * Return:      Gregorian calendar date.4 J. E5 H* C* m7 J6 B$ k6 o" k
  34. *****************************************************************/
    ( v% @9 o9 L, H! _6 ~
  35. DateTime GregorianCalendarDateAddYear(DateTime time, int year)# u& r  i+ g: b0 a! a( `
  36. {
    ; Z3 B( v- o8 H- O; ~* P! i! E
  37.   time.year += year;
    - o9 c% u- ?' b, ~( y3 V

  38. ( c- S5 p* I  R
  39.   if(time.month == 2)& Z% C0 i- q% D% [5 B' q
  40.   {% V) `0 O! l4 k0 z& H! A2 n+ r) I( B
  41.     int mday = 0;4 y1 m4 x# W* E

  42.   ]3 }$ ~+ \9 R( e" V3 ]
  43.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))9 D8 v+ B4 w( _4 b+ c. m
  44.     {* d! y. |. L+ G0 n* S1 f* U3 l9 N
  45.       mday = 29;) [$ r1 z4 ^4 |% L8 ?3 m1 D
  46.     }# X: E+ o$ V, Y
  47.     else* C& J6 j9 b6 G4 S5 A* F
  48.     {
    " M0 W/ \8 @9 a1 e  K
  49.       mday = 28;
    7 `1 m5 M) B! ?5 ]$ Z9 T
  50.     }% u: G0 T9 N4 u- O
  51. 7 Z! q) x9 |  y" U  {0 W; k
  52.     if(time.day > mday)
    % ~2 ]9 ], q. n& x* v, _% G' P0 k
  53.     {
    5 M5 U4 q8 o3 Q$ B/ c6 o, x
  54.       time.month += 1;; n0 [/ n( b  H4 w8 w9 O$ {- s
  55.       time.day   -= mday;% X0 ]: M: t0 N! W0 a
  56.     }6 l) \2 I/ B0 b6 x! s4 L
  57.   }
    , v7 A* e$ `5 P3 \. V8 c' K

  58. % A0 W# F' [. {( ~& W0 a
  59.   return time;( c! y& f" r% s! Y/ X9 Y
  60. }, y: g, O+ D+ l1 b# o& }6 W$ |% ^
  61. ' _$ s8 g' ?3 k2 j! c
  62. /****************************************************************! D$ U% G9 G4 L# t0 ~/ T* x
  63. * Function:    GregorianCalendarDateAddMonth
    . o! e1 V+ @7 h5 G/ V
  64. * Description: Gregorian calendar date add month.- F+ s8 d( o" }1 G  T+ P* @3 _) C% k
  65. * Input:       time:  Gregorian calendar date.
    + I  u8 j& P7 A, l5 x- J4 u
  66. *              month: The number of month to add.' o4 x' P" N% Q( F5 ^& b( v0 |
  67. * Output:
    5 c  v8 X) n' q" s
  68. * Return:      Gregorian calendar date.- d' p0 i* }. M% S; k/ \
  69. *****************************************************************/
    3 }$ Y2 ^' ^* F, x3 x: N
  70. DateTime GregorianCalendarDateAddMonth(DateTime time, int month)
    9 \' i" }( C$ W5 R* b7 V/ H' X
  71. {. k; R% J9 X5 ^* m' R( o
  72.   time.year  += month / 12;( @7 w+ `! g  ^3 l0 r# |6 o
  73.   time.month += month % 12;
    8 m$ L8 ]+ d  p' p' E3 f6 f
  74.   S4 ]3 @- ]- G" h
  75.   if(time.month > 12)) q$ t5 N6 T3 v8 q' k
  76.   {
    2 z! Y3 g0 C) G1 H) |! K
  77.     time.year  += 1;4 U1 \6 @4 c- X. P3 F
  78.     time.month -= 12;
    ' n, B' E0 Q. f
  79.   }4 a+ t/ n. p5 y$ D+ P* J6 a' H  w

  80. ; B9 _! k6 `# Q8 ~- X5 [& b( u
  81.   int mday = 0;
    7 F  z- c$ M7 E
  82. # e4 A! w0 A0 e/ e
  83.   if((time.month == 1) || (time.month == 3) || (time.month == 5) || (time.month == 7) ||
    ; D7 [$ }3 N7 _- L
  84.      (time.month == 8) || (time.month == 10) || (time.month == 12))' S7 J; \: `- U# Z* i* b
  85.   {' a8 D% \# D  @! e: ?
  86.     mday = 31;5 |8 H. T3 \! y* Q+ z$ `3 d
  87.   }
    : ~4 U/ A# I$ Y3 |6 k+ Q
  88.   else if((time.month == 4) || (time.month == 6) || (time.month == 9) || (time.month == 11)): ]0 _% l" j, Q, a
  89.   {* C4 h8 K' e8 k1 d. R3 M
  90.     mday = 30;8 C4 M7 t7 L2 R- k0 N
  91.   }1 l1 [& C+ ~0 ?: c
  92.   else
    2 I6 B! y# C3 }6 A; B
  93.   {
    , q( X/ E0 U, a6 H( |
  94.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))8 K5 J$ S* D( R. I. N
  95.     {
    8 |# G$ j: T3 \: }9 X, B/ x
  96.       mday = 29;, x7 a/ T( Y  F$ o/ m6 i
  97.     }7 m, B7 K! H0 N$ d- ]/ r
  98.     else. F" w* A  t$ s; w1 _; B
  99.     {. o. A0 ]* {  ]) J) I3 g
  100.       mday = 28;0 @+ V" x, e# f- j
  101.     }
    ' d% E- p$ M3 |% V) l" o$ D
  102.   }4 }# A4 q9 r3 y' @7 t$ H# |0 W
  103. 2 c( ^2 c8 A8 o$ m3 |
  104.   if(time.day > mday)
    " }+ a2 r, W$ q7 F3 t6 P
  105.   {( [( d: @- W# |7 J; U$ j! g
  106.     time.month += 1;( y6 d3 _: e. t: Z, ]
  107.     time.day   -= mday;
    6 n9 I( m/ y" Z. z: A

  108. : v. V- b) n1 F$ T# _5 l
  109.     if(time.month > 12)& i) W% h" s: m4 ^
  110.     {
    ; H4 G9 {! J; U
  111.       time.year  += 1;1 X  C* U) E- \; |% X9 B. Z. i
  112.       time.month -= 12;
    " m, i$ j' m* f$ I! A
  113.     }) [# \; l: H* I$ E9 W! S1 j5 \
  114.   }
    6 R) M7 a% H: D# T- ~2 u: T3 y
  115.   x# x& T  M1 @; R! U
  116.   return time;
    ' A/ A, u9 \! H. L1 }& L1 c: M
  117. }
    - O1 W* x, U5 Q
  118. % k* C/ l) L- N, r- ]& }$ J) G# v
  119. /****************************************************************, K3 n$ S: u* C0 J7 g* O; U( X
  120. * Function:    GregorianCalendarDateAddWeek  j; ^, @2 N5 \6 }" D8 p; G6 y  e
  121. * Description: Gregorian calendar date add week.
      O/ D& F; I/ c  b, d
  122. * Input:       time: Gregorian calendar date., I% a1 n2 ^0 v; P- f( E- N3 N
  123. *              week: The number of week to add.* x8 V+ o" Q3 i, _
  124. * Output:5 R1 D- b# d" M0 s
  125. * Return:      Gregorian calendar date.$ c) I$ }+ Q8 S, [" m+ b7 [0 ^0 y
  126. *****************************************************************/* v" B$ _5 L6 ^/ \  Z
  127. DateTime GregorianCalendarDateAddWeek(DateTime time, int week)! b; U$ b6 ]% G# J* `% x3 s
  128. {
    / c2 \1 `% ~$ W( d8 d- N
  129.   double jd = GregorianCalendarDateToJulianDate(time) + week * 7.0;
    ! l/ t" L$ D7 c- B, N1 u

  130. # K6 s" b) W% X1 t, W+ r4 I9 D
  131.   return JulianDateToGregorianCalendarDate(jd);
    : _% H& h. o3 B6 g
  132. }
    ( A) f* W, Q3 n8 d2 t
  133. 3 R3 e5 t! _! s# r
  134. /****************************************************************
    0 E5 ^7 A# ]9 |# d- D& z: c; r& y
  135. * Function:    GregorianCalendarDateAddDay
    5 O* J" k5 l3 h; W6 S- U8 X! n6 x
  136. * Description: Gregorian calendar date add day.
    ; u7 p6 l' ?' Q* E  f9 V1 H4 \
  137. * Input:       time: Gregorian calendar date.
    2 A$ S8 c4 s8 l5 t
  138. *              day:  The number of day to add.
    7 L# T, [+ y0 R0 P) I9 I& l6 R
  139. * Output:. H6 t) k  D2 s& k2 V6 ]2 |" _/ b
  140. * Return:      Gregorian calendar date.
      s4 Z' f) G2 Z  g
  141. *****************************************************************/: P: {9 l( W# [1 ]3 _3 F. P; M2 {
  142. DateTime GregorianCalendarDateAddDay(DateTime time, int day)
    : E8 ?- Y3 V9 Q+ g  A% M" x2 ]) a- ^
  143. {
    - w# @- I' E+ q8 A
  144.   double jd = GregorianCalendarDateToJulianDate(time) + day;
    ) ~+ q. T8 }9 k! c
  145. ) d" z/ m! v9 k8 [
  146.   return JulianDateToGregorianCalendarDate(jd);9 L7 V7 k  S" j+ y; N
  147. }
    0 I7 E+ R0 l  N3 J2 u' f, f- t7 s

  148. 2 ^( }  t2 G$ B6 p9 |- R
  149. /****************************************************************( O- y% q0 k2 e3 h
  150. * Function:    GregorianCalendarDateAddHour
    9 Z" O" d) a" |: }# @. [! S
  151. * Description: Gregorian calendar date add hour.+ \$ |5 R6 Y, O) \
  152. * Input:       time: Gregorian calendar date.) K8 y+ v2 ~: G2 c6 e: y
  153. *              hour: The number of hour to add.
    " |( J! }" Q) a. `9 c8 R
  154. * Output:, P. r. {$ n* I# K
  155. * Return:      Gregorian calendar date.; w5 ^4 x7 h3 o$ a1 x* H2 R
  156. *****************************************************************/
    & Q5 j6 {/ S* l
  157. DateTime GregorianCalendarDateAddHour(DateTime time, int hour)8 |' v  V. b/ J) N% J$ ]. m
  158. {0 K5 m' R- F' M
  159.   time.hour += hour;& _; o! l7 k/ i: U. O2 B

  160. 0 E& c; O6 a' H/ v- C7 p" _
  161.   double jd = GregorianCalendarDateToJulianDate(time);0 z* Y6 `" v  ^. g2 M

  162. ' }4 a1 h! Y4 k$ R7 Z
  163.   return JulianDateToGregorianCalendarDate(jd);6 a/ G+ V7 u$ t; N5 e6 a
  164. }
    : m& e  F7 e1 J

  165. ) O! x( H$ N( p, Y; }( o! e! Y8 c
  166. /****************************************************************- o0 v4 m; a- j7 r. i& _6 K
  167. * Function:    GregorianCalendarDateAddMinute
    8 E0 h7 b' Z/ n7 [" M6 L' w0 ^
  168. * Description: Gregorian calendar date add minute.
    $ T9 o2 b% i- f' G& r
  169. * Input:       time:   Gregorian calendar date.3 ]' i4 T! ~! F. p' p
  170. *              minute: The number of minute to add.
    , p, @& }7 W( r1 Y9 l
  171. * Output:/ p' m* s, m& p) a+ R
  172. * Return:      Gregorian calendar date.: @: X$ ?$ C& ]- O5 ^  L/ R
  173. *****************************************************************/
    ) n2 I& [+ K$ X" ?# _
  174. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute)
    6 a2 |+ ?2 m" _0 N; c7 P# e5 L
  175. {
    . Z' V/ [1 ]% h( }% D! B0 _
  176.   time.minute += minute;4 h- Q/ y# A1 J! H8 u# m2 }1 j

  177.   Q: `* J( L& r  u; N: N
  178.   double jd = GregorianCalendarDateToJulianDate(time);. P# y" ]9 c7 Q! V* o, }" Q

  179. 4 V4 L1 V$ J. z$ ~6 ~
  180.   return JulianDateToGregorianCalendarDate(jd);
    ; T- z/ G9 K) Q/ e' @
  181. }+ B/ G4 J2 O- `+ Y1 n: j

  182. + {. s7 l# ?9 {7 D" }
  183. /****************************************************************8 ~" o$ L; T7 G( Y( W: [  b
  184. * Function:    GregorianCalendarDateAddSecond- ^$ |" l2 I0 p  _) F
  185. * Description: Gregorian calendar date add second.
    7 D2 {% C* _* s
  186. * Input:       time:   Gregorian calendar date.3 Z5 l: R: Z9 c% y. P
  187. *              second: The number of seconds to add.6 J8 G/ o( D- v% R6 U2 ^6 I8 e
  188. * Output:0 f' Y& z* C# d8 k6 d
  189. * Return:      Gregorian calendar date.9 f& Q; m& N8 h! |
  190. *****************************************************************/0 e, s- w* @, W5 y2 W
  191. DateTime GregorianCalendarDateAddSecond(DateTime time, int second)
    # {! n. u/ {% v0 w' l. X  [! d
  192. {: @, @% Y. M0 O: N  k. k8 U3 x
  193.   time.second += second;- }) q" {% P" \5 ~7 q3 Z

  194. " \3 n$ w/ Y) r- X$ Y. R. ]
  195.   double jd = GregorianCalendarDateToJulianDate(time);
    - q0 t" t0 L/ o, M) `0 P* {

  196. 6 o/ ^9 S) _4 t2 _% T) M
  197.   return JulianDateToGregorianCalendarDate(jd);3 _* X& L4 y; s5 ^
  198. }' C6 q! Y8 s* P) O

  199. - {* |% G! E( h5 _, g
  200. /****************************************************************5 |) J" d# Y" [, f
  201. * Function:    GregorianCalendarDateToGpsWeekSecond, q) _% q; h+ g! z4 ]
  202. * Description: Gregorian calendar date to gps week and second.
      }& I, H; r! s/ V. O. w* p
  203. * Input:       time: Gregorian calendar date.$ E5 t5 u% v) K* Y; }5 @. r
  204. * Output:- L9 z6 q+ T& S. c
  205. * Return:      Gps week and second.
    5 f0 ]( `: k/ t1 u. q% M; U# `
  206. *****************************************************************/4 n, h% M( [  @2 g/ E: G
  207. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time)
    ' A, T* h% @. f4 F1 H7 v" z2 l
  208. {, A7 D+ j& E6 U0 Z1 e7 f9 t! P8 w
  209.   double jd = GregorianCalendarDateToJulianDate(time);$ P9 G4 P" \6 R. m& Q
  210. - F& v; b1 z6 U' o6 }6 X
  211.   return JulianDateToGpsWeekSecond(jd);
    * s" t, b) _  F3 p# H
  212. }" ^, Y/ x& R# G% S3 Z4 h: C
  213. ; n4 |$ C5 B' X; J5 {4 R
  214. /****************************************************************9 V* I) s( Q4 b1 Z6 S$ i
  215. * Function:    GregorianCalendarDateToJulianDate* `9 s$ r2 u5 i1 z! r2 c
  216. * Description: Gregorian calendar date to julian date.
      m; A& ?# T$ Z9 k& u$ }
  217. * Input:       time: Gregorian calendar date.
    7 [+ N9 ^8 P/ t( m* ]5 Y! Q
  218. * Output:- V5 r5 B! k) P
  219. * Return:      Julian date.
    , T& a5 k2 O: {, M( S, O
  220. *****************************************************************/. w8 t8 S, o) v: C
  221. double GregorianCalendarDateToJulianDate(DateTime time)$ y3 F6 a5 o& p: ^. p+ s
  222. {
    + \( g; L5 {0 `4 C% O
  223.   int jdn = (1461 * (time.year + 4800 + (time.month - 14) / 12)) / 4- R, {8 ?) }5 R
  224.           + (367 * (time.month - 2 - 12 * ((time.month - 14) / 12))) / 12/ U' Y6 b. ^: ^) a3 i$ `
  225.           - (3 * ((time.year + 4900 + (time.month - 14) / 12) / 100)) / 4
    ; Q7 }. B7 A+ q. l$ L
  226.           + time.day - 32075;
    8 Z0 Q! L. D0 ~. c
  227. . v8 @; h; G& u
  228.   double jd = jdn + ((time.hour - 12) * 3600.0 + time.minute * 60.0 + time.second) / 86400.0;
    0 b0 }! n$ I, }/ X0 t# j0 U# I' ~

  229. ' j7 u( h8 k& `- S2 v
  230.   return jd;
    ! N6 P- E, z/ i/ g
  231. }1 }/ g+ R8 V6 |/ M

  232. 4 }3 a# `: e+ }" b/ c( g
  233. /****************************************************************
    % L9 E# _& O3 R* c, S: b6 N
  234. * Function:    GregorianCalendarDateToModifiedJulianDate
    9 [0 I) @5 g: A' E1 u
  235. * Description: Gregorian calendar date to modified julian date.
    + i2 A; {6 ?% y* ~
  236. * Input:       time: Gregorian calendar date.
    $ I+ a2 ?- |' x& @  p
  237. * Output:4 q  [5 n) U+ r1 \- V
  238. * Return:      Modified julian date.+ P& E/ X6 ?, L, ]7 z' k- X' c" {
  239. *****************************************************************/
    $ m+ u- [% O9 A: p
  240. double GregorianCalendarDateToModifiedJulianDate(DateTime time)0 w4 P3 f) [" X+ |, b4 S" D* B
  241. {) l, ?  n- p: ]/ }7 A6 T* @* @
  242.   return GregorianCalendarDateToJulianDate(time) - 2400000.5;
    : H4 ^! N' j, a3 L' I* J: C2 Z* Y
  243. }* ?. i, G( J' U" b2 i2 S

  244. 0 k1 l4 I' n% J4 }: j6 m0 w
  245. /****************************************************************& b% A: j9 L# @
  246. * Function:    GpsWeekSecondAddYear
    $ y3 H- q$ ], S( U
  247. * Description: Gps week and second add year.
    . B/ S: }% n' T7 E/ z
  248. * Input:       time: Gps week and second.2 W5 i* K) w8 ^7 x3 Z
  249. *              year: The number of year to add.
    2 g3 Z) B* a2 D1 I
  250. * Output:4 z; J! O1 {  s. s: _! w9 [$ I
  251. * Return:      Gps week and second.
    # p6 e0 b" }- ~, A! B7 k4 Y
  252. *****************************************************************/
    * W9 n1 x$ w6 b! O
  253. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year)4 i1 k# q$ }9 L
  254. {
    ) R8 r- o! k2 E& X& _& Y
  255.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);% |7 Z# r: A- O) d& B
  256. ; \# {) A' O2 T- D5 _3 }
  257.   date = GregorianCalendarDateAddYear(date, year);
    5 b9 [/ k8 v, G& J; h
  258. ! b1 V4 v0 h+ D$ x$ C. I: _
  259.   return GregorianCalendarDateToGpsWeekSecond(date);3 O! e& m8 \2 [' k9 l; t
  260. }5 U4 s: Y0 v2 m8 z! ~- O
  261. 6 L/ r! O# D/ ]1 b+ e
  262. /****************************************************************: J6 F7 V, z3 e  o
  263. * Function:    GpsWeekSecondAddMonth
    - q0 o7 ^% K2 ?' v+ A8 M- A0 P5 Y4 Y5 i
  264. * Description: Gps week and second add month.( K# C; v3 |5 x! H" W
  265. * Input:       time:  Gps week and second.
    / H  D) A2 j% p5 O( t
  266. *              month: The number of month to add." t1 ]; R, n) `
  267. * Output:' M/ A3 ]! H/ P! `+ L0 ^! D" p* V/ y
  268. * Return:      Gps week and second.
    3 v7 o% Y% ]2 L
  269. *****************************************************************/7 g# h; n" x4 }/ e3 k1 z
  270. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month)
    / Z" k& {' v5 J
  271. {
    . X" b: Y# {2 [! n3 Q1 A
  272.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);9 h# f5 z5 J# c$ ~- u# Y1 }

  273. , }5 Z, P3 v3 G
  274.   date = GregorianCalendarDateAddMonth(date, month);
    3 y( J, r* {5 \- m
  275. 2 w& a* _/ Y8 E% J
  276.   return GregorianCalendarDateToGpsWeekSecond(date);( N" Y1 E5 u* A3 M0 P( y
  277. }5 U" R7 }6 X# n1 [1 t, r
  278. - g! {0 x% r2 U$ O+ Z( r
  279. /****************************************************************( j# z7 q  z5 b
  280. * Function:    GpsWeekSecondAddWeek8 V7 S% i. C6 y1 n- I4 W
  281. * Description: Gps week and second add week.
    8 H) Q# s1 _: H7 F& }: F" t* a7 }
  282. * Input:       time: Gps week and second.
    : q4 x- o$ b4 M  G7 x& N
  283. *              week: The number of week to add.
    * `6 k; [2 {  z
  284. * Output:4 a% V0 \0 o+ ?
  285. * Return:      Gps week and second.! m2 A; h2 @3 p) `: u0 V
  286. *****************************************************************/8 k$ }  G& y+ S, s+ a1 o( E: {
  287. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week)
    ; k: _; ]- Q0 ~; y8 N4 n- r( y3 y
  288. {
    & t, I" s& w, \9 i0 [* D  Q: O
  289.   time.week += week;
    9 L1 }. Z1 {3 K+ Z

  290. ) c/ Y  E0 o7 p& g" K7 O0 B: O- m
  291.   return time;
    3 R: r/ G$ k1 ~  ?
  292. }
    5 n( g1 y9 n: ?' ~( f) k) v
  293. ; U' j9 Z: f' _! I# G; r
  294. /****************************************************************, R9 [# \0 O) o1 I' S, I) b
  295. * Function:    GpsWeekSecondAddDay
    1 k' [$ Y7 X. K1 r
  296. * Description: Gps week and second add day.
    + D6 a% ?9 E5 f6 H4 D
  297. * Input:       time: Gps week and second.
    ( ?. ^0 m6 A$ p
  298. *              day:  The number of day to add.) P  {: E* l8 Q% ]
  299. * Output:* h8 C% v8 f) }9 u, n  q8 V
  300. * Return:      Gps week and second.1 F' P& v4 ^2 A6 M' m8 e
  301. *****************************************************************/, ^" H! D& X$ t( \6 c3 d  V1 T
  302. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day)8 A9 a$ S  Y/ U2 N
  303. {+ Q3 X1 P) w1 c" a! }
  304.   time.week   += day / 7;
    + T4 P0 U# _& _. F& o; t
  305.   time.second += day % 7 * 86400;
    . }6 u" p( N7 j! Y2 R  r
  306. 4 N$ t, |2 g: M2 X
  307.   if(time.second > 604799)
    $ a/ d. x2 D( Q1 ]0 \7 ~8 n
  308.   {% l5 F  `  {; P. e; z
  309.     time.week   += 1;( j  f, n$ w6 p% c
  310.     time.second -= 604800;
    + c1 V6 d( c+ ]  m' r
  311.   }
    " t6 \) i0 N/ p& W2 K

  312. ; C" t) k' N/ s. g# `1 J5 x
  313.   return time;
    ; G6 w  }; S8 ~; J' S( X
  314. }' Y# M% o1 J1 c4 I3 M2 D

  315. : N6 w+ \/ D( b/ }
  316. /****************************************************************
    8 G1 u, V/ u! o$ b
  317. * Function:    GpsWeekSecondAddHour& {  a( d$ ^/ A
  318. * Description: Gps week and second add hour.0 E$ M1 z/ @( k* x
  319. * Input:       time: Gps week and second.* `# h! e9 l# `+ Q1 d$ P" _
  320. *              hour: The number of hour to add.( `" a5 A5 I2 h' j
  321. * Output:& z# e- o. o  f  ]" R4 Z
  322. * Return:      Gps week and second.1 d+ ~# B/ U9 ]7 I( Y- N! h
  323. *****************************************************************/
    1 U* X6 I* k! S6 d1 S6 _# n
  324. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour)$ H* y3 v$ L& \* I; t0 c
  325. {
    " ~6 a9 q4 ~' ^9 D/ ~" X# R
  326.   time.week   += hour / 168;
    , M' _3 R' z! P  y8 g" N2 g+ l8 K
  327.   time.second += hour % 168 * 3600;3 g2 @! l/ c1 P2 T
  328. . x% ?4 n9 P! E3 H$ ]. i
  329.   if(time.second > 604799)# r( A' z6 i  Q1 B: j4 s' v
  330.   {
    * b% h& E3 x- A* u# y! M
  331.     time.week   += 1;
    $ ~0 Q  A5 g7 h( @# `: I
  332.     time.second -= 604800;5 D4 E. D! J8 ]  `; z% U# j$ c
  333.   }
    ; t; B) l- M" j. T' G
  334.   5 R+ Y; W8 z( G5 @% R
  335.   return time;; C8 `! }- s% m
  336. }3 t$ T" C  R! B0 }
  337. # d7 x! C: _6 D( ]1 F- U
  338. /****************************************************************
    * ]% r8 j: F; G! k7 b1 N
  339. * Function:    GpsWeekSecondAddMinute6 M% s0 o% `: O8 H8 n! C
  340. * Description: Gps week and second add minute.
    , h, @! H' A3 M
  341. * Input:       time:   Gps week and second.
    ; J5 h' I9 R" Q4 I6 a
  342. *              minute: The number of minute to add.
    0 T) E; i+ ?2 }8 |; }5 ^( L
  343. * Output:) q4 N* K# h7 I- Q
  344. * Return:      Gps week and second.& ^1 S! S& v  n6 D4 V
  345. *****************************************************************/& I6 x& \1 n' a
  346. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute)$ O/ R; S/ }- j' c0 x6 k- ]
  347. {
    . Y. A; D  E# c* g/ i4 L4 i7 ~' G
  348.   time.week   += minute / 10080;
    - k6 z1 i' t- t
  349.   time.second += minute % 10080 * 60;
    # F* K* ?- E, u6 p
  350.   
    ( _! r! N! U$ q4 F  h+ n
  351.   if(time.second > 604799)
    ( x, s5 |, h* H9 {
  352.   {& b4 g4 Z+ k$ J' d+ {- n% t
  353.     time.week   += 1;; E' }+ O$ s" F0 j4 ]6 o
  354.     time.second -= 604800;5 k* z0 \/ C1 Q' {4 R7 K4 P' Z
  355.   }" v$ i% E5 Q  W
  356.   3 d$ t) E2 l6 P3 w  X2 P
  357.   return time;) K9 Y$ L+ O4 U7 X8 N+ K4 |) ~( n
  358. }
    # w* g+ `$ a( q* I
  359. / Z( E; Y% M0 i, w: W! J
  360. /****************************************************************3 A) E* x* N: }: r
  361. * Function:    GpsWeekSecondAddSecond
    : O' ^) [' o/ _3 S; g1 e# [9 @+ g
  362. * Description: Gps week and second add second.5 e5 i6 `. J7 j& {$ E. t7 K7 Q
  363. * Input:       time:   Gps week and second.- }8 B- N7 E) A( d
  364. *              second: The number of second to add.3 o+ d1 q; c, @0 a( n- e
  365. * Output:2 u8 y# B1 _( f7 m' S2 u  W
  366. * Return:      Gps week and second.  n9 ]& T8 E, A4 S
  367. *****************************************************************/
    & F4 Z- @$ H& H
  368. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second)
    3 K1 t# B" V8 B, ], d
  369. {
    7 V7 D$ U$ Q: e5 O' A
  370.   time.week   += second / 604800;9 S# B. L; o  p3 U- ^
  371.   time.second += second % 604800;
    + u2 b9 a; O& d

  372. 4 K9 O5 `3 S' I5 l' }  w. z, `
  373.   if(time.second > 604799)
    , E2 U; M6 u9 }
  374.   {
    ( X8 f, V! D; [# P' i( {5 C
  375.     time.week   += 1;
    1 o5 Q5 `2 D/ W# ?/ j
  376.     time.second -= 604800;
    6 I6 I/ r: f: u$ K3 T  W
  377.   }
    " q# M  _5 a, O( m3 r
  378.   
    . s1 K: ?% @# C9 P
  379.   return time;
    ! x, V' ]1 P- ^! \& }
  380. }
      j9 b- R+ {  u4 l% s" T8 U" u

  381. 5 h6 p5 e% h. |- G7 J
  382. /****************************************************************3 F% o# m( N" ~1 y4 Z! m( I
  383. * Function:    GpsWeekSecondToGregorianCalendarDate: {( o2 `. f: Y
  384. * Description: Gps week and second to gregorian calendar date.4 d5 L; y! E* e
  385. * Input:       time: Gps week and second.
    0 y% U% H2 _0 {. ?. X7 Q
  386. * Output:
    / \, ^  ?/ q* R
  387. * Return:      Gregorian calendar date.3 Q! W7 g: i3 Z% ^' P8 e
  388. *****************************************************************/
    ) c- N! G6 d3 q0 h7 m+ v, ~. p+ n( G
  389. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time)
    7 U2 G# |; S1 T  H& n+ b
  390. {6 a4 T% u# \" V' u& b" t+ k
  391.   double jd = GpsWeekSecondToJulianDate(time);
    ' M2 {2 S  V  O$ w- m% c- Z0 x

  392. - @6 ~" Z! n# y" i6 B: d
  393.   return JulianDateToGregorianCalendarDate(jd);7 z& ^9 f9 l8 R6 ]3 X2 c5 M, }
  394. }" ]1 F0 w$ n0 x' o
  395. 3 S3 {3 n6 K( _# N2 W
  396. /****************************************************************! r! |3 G! ?' n3 D; F9 r5 Z# }
  397. * Function:    GpsWeekSecondToJulianDate
    % |( D, _3 [6 m  t* l# e8 D
  398. * Description: Gps week and second to julian date.
    . o7 ~5 X$ S6 ], |& P9 A. y
  399. * Input:       time: Gps week and second." Y! J$ L; z5 y
  400. * Output:
    8 D, A- p7 M$ c
  401. * Return:      Julian date.
    ; K6 x  R2 _) j  ~: x* G
  402. *****************************************************************/
    ' J: c) M/ N! E$ c2 x$ ^
  403. double GpsWeekSecondToJulianDate(GpsWeekSecond time)2 O  b, S, ?0 X% C7 F
  404. {
    * V9 a: N8 P6 ^
  405.   double jd = 2444244.5 + time.week * 7.0 + time.second / 86400.0;
    ! R: u/ i6 Q$ T

  406. % h/ R" H# ]* Y1 Q' Y1 N0 @
  407.   return jd;( I; U3 H. X) j( I
  408. }& c1 R; m* E; ?! ^' s$ q
  409. 3 G& Z# x' Y; Z# Q8 f0 [
  410. /****************************************************************
    4 l* R+ i( D0 [) d! `+ g
  411. * Function:    GpsWeekSecondToModifiedJulianDate
    . l: q  X2 J& z! E" w9 [* V- s
  412. * Description: Gps week and second to modified julian date.
    1 @. S9 n& k$ y; e- Y8 N9 ?8 n
  413. * Input:       time: Gps week and second.: q  g1 a, M  M  r/ b1 X2 s( a( V
  414. * Output:
    7 O' |6 B8 c, }7 P5 J( W9 r+ c+ k
  415. * Return:      Modified julian date.
    5 p2 O" _( Q4 Q4 |
  416. *****************************************************************/
    $ |, i* g9 _, b- A( r
  417. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time)
    4 b! O$ l5 b) Y6 _! J  M( e
  418. {1 N$ H0 B& B9 `
  419.   return GpsWeekSecondToJulianDate(time) - 2400000.5;
    ' |( t) A* I$ ?( i& \
  420. }7 V$ x- _, t8 [" u

  421. ; C4 Y( g+ t8 P* n: s0 d; Q- k2 ~9 d
  422. /****************************************************************
    * g; ?* ]% ~. B0 @- k/ o" `
  423. * Function:    JulianDateAddYear5 \" \7 O& J& e& a
  424. * Description: Julian date add year.
    ' u" r) L/ c: Q) T; `3 n. N, k
  425. * Input:       jd:   Julian date.* o8 A8 C" m( N0 I) u. P
  426. *              year: The number of year to add.: Y# s7 j2 z* f0 O% q5 m) h
  427. * Output:
    , A6 m1 X  n$ _) h: \
  428. * Return:      Julian date.
    9 K7 L* c0 q/ b( q; H
  429. *****************************************************************/3 v* g. ^2 Q- B: B
  430. double JulianDateAddYear(double jd, int year)- B) F* W: x: y! I  e' n- d- A
  431. {
    " _* r) T8 n6 j2 |9 l. v
  432.   DateTime date = JulianDateToGregorianCalendarDate(jd);
      J& m; g3 }4 z0 F# B
  433. % k6 O% I: I. {6 a+ M. T( L
  434.   date = GregorianCalendarDateAddYear(date, year);* S! _; z- F! [) L

  435. ( L2 c- b6 |; Y  L5 b
  436.   return GregorianCalendarDateToJulianDate(date);
    ' |& v  G/ D5 U
  437. }: L( v+ V2 }9 A

  438. 5 n" Z$ m4 s6 Q* D  E  y9 F
  439. /****************************************************************" h9 ^4 O; b7 p! t, {! G
  440. * Function:    JulianDateAddMonth
    3 y% `' f) Z/ B0 i6 T
  441. * Description: Julian date add month.7 N5 s* `5 K5 x. M7 e  \, o) c: a
  442. * Input:       jd:    Julian date.( n6 A* o. [) ]; [: r
  443. *              month: The number of month to add.
      @4 r# z7 @# U8 g, P  ~
  444. * Output:% n* \4 S/ k5 V, C. m" `  s
  445. * Return:      Julian date.
    1 A# x% \( o4 ?# i: ?
  446. *****************************************************************/
    ) x# `' y2 U9 j0 }# K2 l- l
  447. double JulianDateAddMonth(double jd, int month)% \; m# E  t  D
  448. {
    & k6 E$ |5 F7 _" j$ j; h
  449.   DateTime date = JulianDateToGregorianCalendarDate(jd);
    ; ?" u. {5 z: j* [$ A
  450. $ x  ]  s% Y* C2 g* k4 y& f% [
  451.   date = GregorianCalendarDateAddMonth(date, month);. `' A+ t0 N" m# R2 k
  452. : h& }6 I# I" _, p1 `( f
  453.   return GregorianCalendarDateToJulianDate(date);6 [  ]0 ?( P9 J( C  _3 l
  454. }: i. M% M3 E6 Y
  455. 6 x, M; v  z& u2 o6 z( t, V3 D
  456. /****************************************************************% V0 ~% Y# p; i; p2 b+ Z& m3 b, e
  457. * Function:    JulianDateAddWeek
    " t8 C' X- q+ |# b' r) d5 r
  458. * Description: Julian date add week.& A9 P' Q# N9 Q! Z
  459. * Input:       jd:   Julian date.) y5 s0 M1 f- ?% g  N
  460. *              week: The number of week to add.
    2 N8 ?& T: s+ P' T/ D, ]; j
  461. * Output:
    % c* X2 K6 q3 |; J1 E/ s
  462. * Return:      Julian date.
    7 T- W2 _' R$ n, ]4 |6 S) S
  463. *****************************************************************// b( o! f" O  `& z& g: j
  464. double JulianDateAddWeek(double jd, int week)& s  z' J: Z1 k* T8 ~( |
  465. {
    : u9 t; o* p7 K$ }2 K4 G. D
  466.   jd += week * 7.0;
    / w, T) P1 L1 p9 q+ s2 S2 b
  467. ) i. K2 n. ~/ s& Y
  468.   return jd;  q8 ?9 G( r5 O6 q( q
  469. }/ ^! v4 f2 O+ A0 V3 T2 ^* b. j! I5 J

  470. ' ~( q- t) i5 n
  471. /****************************************************************
    ( P2 q7 `# t* a& C
  472. * Function:    JulianDateAddDay6 c9 l9 B- A0 l( @& v* l9 |/ M8 {
  473. * Description: Julian date add day.
    ( N: A) ]0 Q8 ]  ]8 k
  474. * Input:       jd:  Julian date.
    / I4 [6 ]- U$ S( |
  475. *              day: The number of day to add.) N- [& R) n: w) k
  476. * Output:
    - |$ M4 Z3 ~$ m/ K
  477. * Return:      Julian date.
    . F8 f6 H" Z! e" l4 ?
  478. *****************************************************************/8 b& ?$ R% ^7 {
  479. double JulianDateAddDay(double jd, int day)  Y4 X3 {+ m& Q# S
  480. {  S+ M# |; n# v
  481.   jd += day;
    ( l* y1 b% M* `6 o6 z

  482. 6 F! P" R' `- ~4 L, d+ O8 ]
  483.   return jd;
    + j/ M/ L; v/ m* P0 F. {# Q+ a
  484. }
    % A2 w3 \) m2 h" K% u' K

  485. 9 N0 \9 E. J" c) T5 u, `" }
  486. /****************************************************************2 u4 [+ ^" v9 T$ S( d: F. b) F
  487. * Function:    JulianDateAddHour
    ' }0 L9 D+ K- X6 ]5 Y7 H! e
  488. * Description: Julian date add hour.9 V/ a% e- \3 v1 y7 T3 n/ B
  489. * Input:       jd:   Julian date.
    5 @0 E2 l2 p2 T2 j" i$ \
  490. *              hour: The number of hour to add.6 t+ l& |# A9 z% ?. T6 Q; ]
  491. * Output:
    6 O+ f4 d6 f. l( ^
  492. * Return:      Julian date.# k2 W) \. R* V
  493. *****************************************************************/
    ' M5 ^3 ~% |# b' `; Q! n
  494. double JulianDateAddHour(double jd, int hour)
    5 Y, _! F! q6 T* {3 {' g
  495. {: V5 G; O3 N* {' l
  496.   jd += hour / 24.0;' ]' t: i! F6 n" G

  497. 9 \% y( X# M) n. u6 O, r
  498.   return jd;0 U, Q' \& j, \! L
  499. }  Y  m; l/ J+ A

  500. ) y+ e1 E2 G! p7 q4 x  E$ N- ^
  501. /****************************************************************
    9 ]0 V- D, s6 w: X  n8 ?
  502. * Function:    JulianDateAddMinute
    ; d: i! }4 O2 X" I) E
  503. * Description: Julian date add minute.* k1 }  ~0 E' h5 }
  504. * Input:       jd:     Julian date.# \# g: L6 D+ `: v; S& q& u5 A6 @! a2 K
  505. *              minute: The number of minute to add.+ x" C0 l  G: i3 X8 U! X! n6 T
  506. * Output:, M+ n5 F0 e+ b
  507. * Return:      Julian date.; p5 C2 ]. [5 s
  508. *****************************************************************/$ b- ?6 g  e% i0 [- o+ [  \# y
  509. double JulianDateAddMinute(double jd, int minute)
    ; K: \" B, _- ~* j$ V7 Y
  510. {
    8 L, q9 x& c9 X( ?" W
  511.   jd += minute / 1440.0;
    2 f" c" O6 I. J: ?

  512. : A5 Y6 q9 n  o, n3 G/ N
  513.   return jd;! T6 [5 e, n) c- _4 [* D/ |4 `
  514. }* H' \$ g  ~2 @" s7 F. d

  515. , l- c1 q5 }/ ^, w8 a
  516. /****************************************************************
    8 e4 R# M1 p' }0 R' r9 G! i  A
  517. * Function:    JulianDateAddSecond# t8 ^$ e* V6 }0 T. U: ?
  518. * Description: Julian date add second.
    2 G2 O7 O& ]: }9 s# t5 @' A
  519. * Input:       jd:     Julian date.
    ; n; I% R3 n. a7 @: s2 X/ l. s2 j
  520. *              second: The number of second to add.
    7 a# R) u/ s( n& w/ u
  521. * Output:4 f4 e0 ~) r* H& S
  522. * Return:      Julian date.
    9 H* F3 j; p, n4 n, V
  523. *****************************************************************/4 |4 c: i+ }) o6 S3 O" I
  524. double JulianDateAddSecond(double jd, int second): s8 R% `# f8 g3 r
  525. {
    6 S# q1 s% O" O
  526.   jd += second / 86400.0;
    & x! s- ^5 Y  _0 l
  527. , d6 u% J, Z7 A% \$ Z: K/ i
  528.   return jd;
    , d1 {& J" N. G
  529. }
    0 L( m# ^/ P. s6 b3 a# a$ C9 d
  530. ; N9 o$ R% I' G' ^5 A
  531. /****************************************************************
    $ K# J& c3 Z) n( J: V3 i  ^$ f5 x
  532. * Function:    JulianDateToGregorianCalendarDate
    + p9 v" }. ^' P9 ?" s- m
  533. * Description: Julian date to gregorian calendar date.; A+ }" o* H7 e; O+ ?; Z
  534. * Input:       jd: Julian date.0 s1 B. T9 V7 Z# X- h! n1 g+ f
  535. * Output:
    0 O9 t; n; Q) D3 q
  536. * Return:      Gregorian calendar date.  _4 q1 ^, z. ?% d6 ~1 N
  537. *****************************************************************/7 e5 ?. x' v% w+ Y. {. l) L
  538. DateTime JulianDateToGregorianCalendarDate(double jd)! n( k6 g" [8 _% d3 X( c
  539. {
    # m4 s& H) x: v! Z0 a
  540.   int y = 4716;2 ^% p6 c) P0 E" W9 k
  541.   int j = 1401;
    6 I- k0 Q6 U" [# ~
  542.   int m = 2;
    ! O  S9 l/ c- u8 e- ?9 ?! a
  543.   int n = 12;! }4 s5 p+ [/ T8 u/ ~) v0 ~+ j
  544.   int r = 4;
    - ^7 G! w2 m. ^( N
  545.   int p = 1461;
    ) b3 i1 g) j1 O- ^5 w# |
  546.   int v = 3;
    3 E$ j& A8 P6 I/ F9 i
  547.   int u = 5;
    ! W$ t# Z  h9 l: M) t1 E
  548.   int s = 153;" }5 |8 Q3 T, @) s3 P! |
  549.   int w = 2;
    . a. p& S8 }/ X( C" ^# H" k( `% U
  550.   int b = 274277;
    ; B! V! g. H! K' ~! w) Y
  551.   int c = -38;
    8 ]+ t  T9 `7 E7 X% p: y. V

  552. 5 U3 I9 C9 j2 s4 g
  553.   int jdn = (int)(jd + 0.5);
    # O. M' @4 b' {: ?5 D6 {
  554.   int f   = jdn + j + (((4 * jdn + b) / 146097) * 3) / 4 + c;
    % w" r' O" X3 E: x/ R
  555.   int e   = r * f + v;
    3 Q5 ~+ @7 n/ M9 T9 ^# l, \
  556.   int g   = (e % p) / r;
    $ M2 V' d5 Y$ C9 d+ {
  557.   int h   = u * g + w;; i: A4 A: M9 T4 g
  558. + y5 D$ k8 S; E8 x/ p
  559.   DateTime time = {0};; S7 \/ Y6 R1 I2 t) @& Q/ ~4 _

  560. & P, \9 D1 s# z0 H! {8 I4 ?3 o
  561.   time.day    = (h % s) / u + 1;
    ; X& k- f5 ^& A& x: U
  562.   time.month  = (h / s + m) % n + 1;5 l" t) e' D. k6 u: v7 \( W/ Z$ S
  563.   time.year   = e / p - y + (n + m - time.month) / n;$ R& }8 U; z1 K  c; Z: P/ C
  564.   time.hour   = (int)((jd + 0.5 - jdn) * 86400.5) / 3600;6 \, C9 y0 U6 I, A7 _
  565.   time.minute = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600) / 60;
    6 Z0 u6 R- l" `
  566.   time.second = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600 - time.minute * 60);
    ) Q9 {8 Q% r, j& y- x

  567. % Z' k3 U4 A% f4 `7 K
  568.   return time;
    ( K" {; p6 A4 L7 G
  569. }
    , Y, I- W. e- F! y8 n; z# u. `
  570. ' V2 s7 D: }! w$ f. M0 V
  571. /****************************************************************4 ~3 Z. i! V3 i6 a3 `
  572. * Function:    JulianDateToGpsWeekSecond
    ( d3 p6 m, `  b- D' ]* b# F! C+ z; x
  573. * Description: Julian date to gps week and second.$ v+ O8 N( {. |* Y
  574. * Input:       jd: Julian date.
      b2 @, z7 x9 x) Q
  575. * Output:
    . W3 _& @% j1 R7 I9 w; D# l2 U
  576. * Return:      Gps week and second.! c  _& R/ Y/ I5 t: R
  577. *****************************************************************/
    7 d7 v/ d, ]1 p8 J1 e' C
  578. GpsWeekSecond JulianDateToGpsWeekSecond(double jd): N$ u  H1 J* e
  579. {3 g/ v( z6 i/ e  m
  580.   GpsWeekSecond time = {0};
    + ~; |" k8 w+ J' A% A8 a
  581.   DateTime      date = JulianDateToGregorianCalendarDate(jd);5 K( ^$ {) t* Q+ H/ N( d* N. E

  582. 9 t& o) n/ H7 V
  583.   time.week   = (int)(jd - 2444244.5) / 7;
    5 K9 N1 J" W0 ]: P1 g2 i
  584.   time.second = ((int)(jd - 2444244.5) - time.week * 7) * 86400 + date.hour * 3600 + date.minute * 60 + date.second;$ |2 G0 x2 z+ k8 ~2 D& j5 k, U; _

  585. 2 j5 }7 _* w( v
  586.   return time;- c2 r% f" ~+ u* R
  587. }
      ^. E- A2 G/ ^7 v( i2 S# Y+ s

  588. % |, x, A2 M6 ~* i
  589. /***************************************************************** y1 J4 ]; @2 V0 Y- N$ h# ]
  590. * Function:    JulianDateToModifiedJulianDate
    , U' J9 Z! u! R% I* F* L
  591. * Description: Julian date to modified julian date.
    , f, u. W  q( x; w4 v; Z6 y8 D
  592. * Input:       jd: Julian date.0 }: O5 r0 \3 O2 |1 n, F& [3 v
  593. * Output:
    8 A/ X4 F, T( g1 ~+ J- [: i
  594. * Return:      Modified julian date.
    - [  `; J4 B8 i' U/ c" ?" M# z' t
  595. *****************************************************************/# P8 |, p% M! |7 }8 @+ g
  596. double JulianDateToModifiedJulianDate(double jd)
    5 I: c, H* z! ?9 L) f
  597. {3 z+ x  V" g/ j: y+ Y5 g/ o9 w" ^3 Y
  598.   double mjd = jd - 2400000.5;3 B0 t& K  w/ i! S% L9 o. u8 m
  599. ; W3 S) E8 J' C! B8 a+ K) u
  600.   return mjd;1 x" F4 g1 t9 i0 ~4 J) _3 @
  601. }3 w# G/ H$ y' m6 j0 I( O

  602. 2 W- ^3 `, a& b. P
  603. /****************************************************************/ X+ K* e$ u1 V7 A& V( C% h# t
  604. * Function:    ModifiedJulianDateAddYear  P; t4 u/ f7 W7 w# {
  605. * Description: Modified julian date add year.) h) q, g- D0 d% c" N
  606. * Input:       mjd:  Modified julian date.$ j2 k; Q2 K/ }
  607. *              year: The number of year to add.
    2 e) j  y" \  T
  608. * Output:
    / M# d) Z4 T1 ~8 X3 T8 U/ y
  609. * Return:      Modified julian date.
    0 ?5 N. }1 K/ a( |
  610. *****************************************************************/
    2 g; q! r4 I' d6 `+ f; F: C1 H
  611. double ModifiedJulianDateAddYear(double mjd, int year)
    2 y2 O2 \" f$ {. g: z% ^4 I
  612. {
    & v2 [4 W6 i4 v! H
  613.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
    0 ]. y7 G/ E4 X5 L) ]
  614. - }( Y9 s/ Z& i$ g) K4 O
  615.   date = GregorianCalendarDateAddYear(date, year);
    + A& a0 w9 \3 F" S3 \9 e* [
  616. 0 ]# A- X: S5 O7 {, G1 Y( O
  617.   return GregorianCalendarDateToModifiedJulianDate(date);8 Y4 c- U$ s5 n4 ]* ?& }+ o
  618. }
    - ~) Z8 l0 e0 ~: q5 _
  619. * H4 P4 c9 ~; n9 K
  620. /****************************************************************
    & W: o+ a  p0 ?. F  K  _8 U
  621. * Function:    ModifiedJulianDateAddMonth
    9 ~% @  H1 e) {- }4 e. d" O4 X) X
  622. * Description: Modified julian date add month., W8 U/ a: _( w" y! l7 J2 l% q
  623. * Input:       mjd:   Modified julian date.
    8 k$ u- Z1 {' D" T
  624. *              month: The number of month to add.
    ( [0 \' f7 T2 J' }( c! ^" A& N
  625. * Output:
    + s8 B1 L: D! j3 u1 \
  626. * Return:      Modified julian date.
    , J8 |! a- s0 s+ Z. Y/ Q" l
  627. *****************************************************************/6 [! `. q' P- ?
  628. double ModifiedJulianDateAddMonth(double mjd, int month)" G* C- u6 F) h: F, l* z
  629. {
    5 b& \2 h- t" r) J) o5 B7 t6 r1 c
  630.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
    4 L/ g4 x* X) q8 G# ]8 k8 E! ~* f

  631. + k$ X$ S2 v( s
  632.   date = GregorianCalendarDateAddMonth(date, month);: t$ u$ [4 p+ l2 ^9 N& q, L

  633. ' U& i. p9 j7 m  [8 v' q
  634.   return GregorianCalendarDateToModifiedJulianDate(date);4 }5 x" f  |* z
  635. }) V& I* I3 u: k% a! f' C) G  G3 q( i
  636. 5 ?- x" [$ L  k+ _8 G6 B1 w% c
  637. /****************************************************************
    + a6 m& k" e% U# u
  638. * Function:    ModifiedJulianDateAddWeek
    ! J" _8 }7 ?3 n6 v* Y
  639. * Description: Modified julian date add week.3 ?7 I/ K5 Y% u
  640. * Input:       mjd:  Modified julian date.
    0 H5 Y1 Y: w' l; P
  641. *              week: The number of week to add.+ n7 I0 i& e4 P& |5 h! y# R- s
  642. * Output:
    : e  [# G( g' `# D5 C0 Z$ y
  643. * Return:      Modified julian date.
    / S, d' V2 M( J
  644. *****************************************************************/0 m4 A9 X" \# D2 z
  645. double ModifiedJulianDateAddWeek(double mjd, int week)
    " S. m/ ?. N/ A* Z3 ^# O- Y0 K
  646. {7 O0 O" P7 K' H" v3 z
  647.   mjd += week * 7.0;
    9 G: J4 ?  w6 [( i. d, K
  648. : U5 g7 z. h% Z( b6 Z
  649.   return mjd;+ R5 S  Q. [' \/ B+ J
  650. }9 Z* k; c, T! j6 A( v! [) h
  651. $ O3 r/ h) |, T. U8 E+ _' E4 K
  652. /****************************************************************
    8 E1 ]" C( m$ s1 J
  653. * Function:    ModifiedJulianDateAddDay/ c9 L* M: c. n+ c
  654. * Description: Modified julian date add day.
    6 F: W; e4 b( J+ ?1 \+ @7 n
  655. * Input:       mjd: Modified julian date.
    * x3 M" \2 P4 {. i2 E( n# h  T2 G
  656. *              day: The number of day to add.8 F. W; M9 }1 _0 r1 I/ w# \# U. r  w
  657. * Output:& J% q5 A0 c  P  W# u7 w5 j
  658. * Return:      Modified julian date.: m% U/ N9 g4 X; `4 w
  659. *****************************************************************/
    , X3 t6 b; ]" V0 Y' T
  660. double ModifiedJulianDateAddDay(double mjd, int day)
    3 M) W2 i4 W% p/ m( X+ o& P
  661. {# Q& ], n. j6 E1 S4 Z8 s6 P. c. S
  662.   mjd += day;- i( W, L+ x& f4 [# r, |

  663. : F! |- _1 E6 j  ?  ~. O
  664.   return mjd;
    ' Y8 ]! `8 V% j2 A2 u
  665. }
    $ S/ u0 X/ j3 y* X

  666. . W+ I# [; g2 v; e: }2 i# s! n
  667. /****************************************************************9 w, K3 l. S. j) ?5 k/ ?
  668. * Function:    ModifiedJulianDateAddHour
    1 T4 X1 U1 B$ ~2 `3 t, V
  669. * Description: Modified julian date add hour., K- b* s: L/ Z0 z: x4 @
  670. * Input:       mjd:  Modified julian date.
    * E2 L" q8 B, V
  671. *              hour: The number of hour to add.
    + Y! Y- R1 `1 z, n
  672. * Output:
      O; p( L0 d# p- Y
  673. * Return:      Modified julian date.
    . K' A$ d" I  G. M! `
  674. *****************************************************************/
    ' x( @, e3 ^' a* S. ~) u
  675. double ModifiedJulianDateAddHour(double mjd, int hour)7 @- k2 d' U8 p( K6 F% z+ B2 a6 l
  676. {$ {3 K0 }! Q, v/ ]1 G( x
  677.   mjd += hour / 24.0;
    0 E* f$ a/ Q7 p+ W8 M* |
  678. " X5 F/ g: L( M8 y  a7 h: d
  679.   return mjd;% k. V/ e# w' ^2 T
  680. }
    - Q6 H: N: V7 ~: e- ]$ p6 i
  681. , |; K! p% O7 c/ e  C" c; \" T( O
  682. /****************************************************************  h6 M9 |' a( e0 i% w
  683. * Function:    ModifiedJulianDateAddMinute
    9 b/ p9 c) Y: R7 E' ^3 p7 ~% V1 d3 @
  684. * Description: Modified julian date add minute.  u( _. I# C. k9 Z9 N2 A' ~+ y
  685. * Input:       mjd:    Modified julian date.
    ! H3 z. Y( ?/ A, b# p6 o/ u
  686. *              minute: The number of minute to add.2 U  R9 A4 z7 p
  687. * Output:1 E+ E' t0 l1 l4 P
  688. * Return:      Modified julian date.
    ( q- ]+ c0 ?/ B7 S- p1 l! v
  689. *****************************************************************/
    " A3 V8 \& S2 g& y
  690. double ModifiedJulianDateAddMinute(double mjd, int minute)+ i. `  Y3 E0 u6 ?
  691. {
    ; S2 u0 u. c# C
  692.   mjd += minute / 1440.0;
    , v7 ?% Y6 [$ D+ |: f
  693. 8 k) p" z+ `, s1 G* [, h
  694.   return mjd;( o: _& ^! ~0 |7 I8 p8 Z% z
  695. }; m- @4 v$ d5 r; j- R
  696. . U" Q+ g) s$ }1 O5 o7 \  d
  697. /****************************************************************
    - `" p- N+ ^( q! y0 M# s* ~/ j
  698. * Function:    ModifiedJulianDateAddSecond
    / v  U" Y/ C5 y( D
  699. * Description: Modified julian date add second." G# U) G/ ?1 j
  700. * Input:       mjd:    Modified julian date.
    & W7 r! v; s9 H! @# d
  701. *              second: The number of second to add.
    / u, X4 N) D9 u/ \: P: A
  702. * Output:0 R' `2 Q7 ^) |5 ]7 J. ~& M! l
  703. * Return:      Modified julian date.% B# s- T5 H' {
  704. *****************************************************************/
    4 p  E# \) S; w
  705. double ModifiedJulianDateAddSecond(double mjd, int second)% `( r" k4 U( D( l0 G
  706. {" ^; z0 Z+ @* u% V# G) x) l
  707.   mjd += second / 86400.0;9 U( c$ N( C& O) t: G

  708. / x, s* e! q. f5 l/ T& @
  709.   return mjd;- K, j6 e2 C% R4 i. j
  710. }
    : P# V& q: M% A' t) N# T9 b

  711. 1 M$ V% C7 d. t1 n
  712. /****************************************************************
    , E* i3 M6 k0 t" y3 R1 S$ |! S
  713. * Function:    ModifiedJulianDateToGregorianCalendarDate% Y, y" r) d/ E) }# y1 U" L
  714. * Description: Modified julian date to gregorian calendar date./ w) h7 t) r. D2 a+ p
  715. * Input:       mjd: Modified julian date.
    " L/ g' T! i2 v( k- Y
  716. * Output:
    & \; e+ e5 a3 L* @
  717. * Return:      Gregorian calendar date.8 B2 T; u9 p) X7 m" f( t3 u7 `
  718. *****************************************************************/( K4 P; v$ K0 l. y
  719. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd)
    : a" E& @) W* F8 X5 C; L
  720. {
    ) B* [" Y# W% s3 C  W: B
  721.   return JulianDateToGregorianCalendarDate(mjd + 2400000.5);1 d0 h- q8 h) I4 a$ k, x
  722. }) z( q2 ^! D3 U& w& p3 R+ f4 K

  723. $ T- |) L* G8 l6 m  i
  724. /****************************************************************
    4 d6 R+ b$ c! ]% o$ h) b4 S) D; k
  725. * Function:    ModifiedJulianDateToGpsWeekSecond
    $ N# t! A. ?+ \2 I
  726. * Description: Modified julian date to gps week and second.3 V. l/ k6 j* P/ O) M
  727. * Input:       mjd: Modified julian date.
    ' k5 \  U8 J5 a7 P1 c3 P% C
  728. * Output:" v8 U- X6 H/ ~! J2 ]& p
  729. * Return:      Gps week and second.! [- ?% g  B5 R3 {5 z
  730. *****************************************************************/( @- z5 X' X; P
  731. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd): s: z5 X! K# G& o/ s
  732. {
    ) I- X) w+ K0 a' c" m# [0 `7 n
  733.   return JulianDateToGpsWeekSecond(mjd + 2400000.5);
    1 [8 {3 l: ~7 k0 o( R' E( b! @- p9 A' \
  734. }
    , G* C) l2 H$ k

  735. 9 Q1 D0 K$ M0 R; |8 R* W
  736. /****************************************************************# [5 x: H& q7 `8 c! k
  737. * Function:    ModifiedJulianDateToJulianDate( D7 Y$ e: [9 v* M& ]
  738. * Description: Modified julian date to julian date.
      r" u5 J  G: E. P$ G8 C  j( t0 P
  739. * Input:       mjd: Modified julian date.! e7 m3 Z+ q  O# n$ c
  740. * Output:
    . l4 f2 h* _- R
  741. * Return:      Julian date.* }+ ^( H" H. j. }1 h$ I
  742. *****************************************************************/
    4 ^0 O# L7 o% }( r- m
  743. double ModifiedJulianDateToJulianDate(double mjd)
    1 T" A* T1 b  q8 e
  744. {
    0 E, K* X: x: q$ w0 M7 l% b
  745.   double jd = mjd + 2400000.5;" ^2 X  I0 c, T! N5 o

  746. * t" \* O! A( e8 }" A
  747.   return jd;
    2 }3 j* P  V# p/ X  ?; N2 O
  748. }: X% T3 a, v1 |; ]- j6 V. L1 |5 C* \
复制代码

6 f6 E' X* E8 |0 S; @7 u9 B( H0 e      main.c文件
' h6 _4 P7 y/ f" P& q
  1. /****************************************************************1 W8 _& ~0 r0 t6 n0 @) o
  2. * Copyright (C) 2017, XinLi, all right reserved.
    6 f5 l0 v$ o/ f9 y1 I) D' K" I$ X
  3. * File name:    main.c
    * d/ ~9 g: v7 F. O- L% m
  4. * Date:         2017.10.17' _: ]0 A; q+ f5 I! l
  5. * Description:  GPS, UTC and local time displays.
    4 p$ ?& L3 d9 x, v# O& X
  6. *****************************************************************/
    6 F- E. z% i- f$ T
  7. 7 l- {8 V, [( L* I$ {5 @
  8. /****************************************************************0 \  C+ E; i9 I# Q4 |; Z3 l
  9. *                        Header include  ?; E0 [7 E* l3 |
  10. *****************************************************************/
    4 @) y, }8 v  z6 v
  11. #include "DateTime.h"' L5 d& I! {, B1 W
  12. #include <stdint.h>+ s- @5 q" _* A( {2 [* b4 r4 ?
  13. #include <stdio.h>5 m- L+ m" ~7 V. {- n
  14. #include <time.h>
    : F# f! i7 m/ U0 p7 f4 F6 n
  15. #include <windows.h>
    7 v" F( z0 R; ~' B/ s/ e

  16. + h, e& L7 d# s7 R( S# D" \& t
  17. /****************************************************************
    % B" R( I! X2 ~- h3 k
  18. *                       Global variables
    5 [4 R) Q! L% ]. ~! I1 j% r, ]' u& `% l
  19. *****************************************************************/
    " j/ x( e3 t1 `; T8 s
  20. 1 \8 P# z  {+ I$ X

  21. % S" Y) o9 M. G5 |1 ]. {: Y$ p) I3 l
  22. /****************************************************************7 o. _$ M; S! I  N
  23. *                     Function declaration  p. C7 `* ]: L9 u5 s. r% v
  24. *****************************************************************/
    8 ^! ]4 B# d* j* [! h3 t
  25. static void gotoxy(int x, int y);2 |9 v8 r1 P" \9 d: b6 _: |, W  ~8 A2 w+ \

  26. - x# z$ M# X) T% N1 l
  27. /****************************************************************. y6 \1 D7 p3 V9 Y$ ?8 N9 ~
  28. *                     Function definition
    ! I* Q, j+ k$ O; H, H
  29. *****************************************************************/+ X. P4 R3 d/ T$ H  a& D  e

  30. 2 p7 Z4 m2 r8 ?# m1 l
  31. /****************************************************************/ K3 ?) O/ x: z$ S
  32. * Function:    main
    4 X! P$ \0 z$ Y( ?" s
  33. * Description: Program entry.
      \: \* E) N1 _6 u, d- n7 A
  34. * Input:
    " d3 Y9 d4 L) M( Y2 i1 H; @! L
  35. * Output:
    ' b  H& ^7 _  z. Y
  36. * Return:
    ) n7 ~+ r. Y+ T; l
  37. *****************************************************************/; i/ X+ W8 U5 A3 s  X4 N9 T
  38. int main(void)
    * j  o9 g# ^) Z
  39. {
    * d8 F% @  m% y& g4 z; _) a3 v
  40.   for(;;)+ I! F# e; e4 e8 O
  41.   {
    ( E. j" f; \: U/ x+ C* s! S
  42.     time_t        times     = 0;
    , T8 i8 A+ _# Q& C: K
  43.     double        mjd       = 0.0;
    , r1 @; H  W' P) O$ q4 ?
  44.     DateTime      utctime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};4 i: o& E& k) S! ?$ O- \: J
  45.     DateTime      localtime = {.year = 1970, .month = 1, .day = 1, .hour = 8, .minute = 0, .second = 0};
    7 V# j3 B! i4 M/ ~4 m
  46.     DateTime      gpstime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};) u3 ?0 P* l8 b; q
  47.     GpsWeekSecond gpstimews = {0};
    / _& P2 i: H' O0 U* o
  48. / ]6 s9 U7 P0 D3 r  [7 c
  49.     time(×);2 {( p/ x3 F8 z& m( F
  50. % d/ `4 d7 k, W& D
  51.     if(times > INT32_MAX)
    8 R; K: E" p0 X- N/ e, h$ `
  52.     {
    $ J4 ^  ~% ?, G8 ?( o* P" v
  53.       utctime = GregorianCalendarDateAddSecond(utctime, INT32_MAX);
    9 |" V2 L8 _! M' w
  54.       utctime = GregorianCalendarDateAddSecond(utctime, (int)(times - INT32_MAX));# a  E! s% i$ U* _, C9 C
  55.     }1 o( B( \' @7 Q5 p2 b( x; e- |
  56.     else) M) S, |3 A: K- W7 Q
  57.     {
    9 S1 ^, M& w2 s3 J) x& I
  58.       utctime = GregorianCalendarDateAddSecond(utctime, (int)times);
    ! B7 b& x* I6 d! z
  59.     }/ _0 D6 a2 K7 _2 O
  60. , S# t' S$ T# K2 X5 B7 o
  61.     mjd       = GregorianCalendarDateToModifiedJulianDate(utctime);
      d" S- c3 ^4 j! l$ y# M9 D8 g
  62.     localtime = GregorianCalendarDateAddHour(utctime, 8);) G* x! T7 \& o# N. _& _
  63.     gpstime   = GregorianCalendarDateAddSecond(utctime, 18);; u; x0 }7 p, n. l7 v% `/ \
  64.     gpstimews = GregorianCalendarDateToGpsWeekSecond(gpstime);
    / g% M; W4 k5 f6 ?
  65. , |; Z5 j6 y+ o( M! a: p
  66.     gotoxy(0, 0);" c" {# O8 {5 I3 i/ j. e
  67. ; I. E6 K$ ]: S7 J: o- ^. W
  68.     printf("Local | %d-%.2d-%.2d %.2d:%.2d:%.2d | timezone UTC+8\n",
    / q, s+ i+ @- L5 h, T9 ^) B5 `
  69.            localtime.year, localtime.month, localtime.day,
    $ C- W- ?+ z/ `" {- T% N) g
  70.            localtime.hour, localtime.minute, localtime.second);
    . e4 _+ v# e) S5 I* V
  71. ) ^  h! G( q! f& [0 F
  72.     printf("UTC   | %d-%.2d-%.2d %.2d:%.2d:%.2d | MJD %.5f\n",
    & P) ^3 I" F" u
  73.            utctime.year, utctime.month, utctime.day,+ R: g; Z, N% [4 @+ b: h+ W
  74.            utctime.hour, utctime.minute, utctime.second,
    3 B0 v1 k% X4 X( b, S. L! a) T3 B* J
  75.            mjd);
    + p- X1 S; I  N3 \! K" E
  76. : O, f8 [/ ?# K% m; h6 s5 b+ G: G
  77.     printf("GPS   | %d-%.2d-%.2d %.2d:%.2d:%.2d | week %d %d s\n",
    9 \8 N2 D4 N5 L# F) Y# q; q3 Z/ H. `
  78.            gpstime.year, gpstime.month, gpstime.day,/ E9 R' V( Z& R8 Y% Y
  79.            gpstime.hour, gpstime.minute, gpstime.second,, ]8 U, q  B0 `; D* {% \  X
  80.            gpstimews.week, gpstimews.second);0 h% v6 }8 l, ~0 N/ r! I7 H8 T

  81. # o7 O: ~% X3 ?2 ~
  82.     Sleep(100);
    ' l$ j5 D& ~! t, O( h
  83.   }' X2 q! x$ ?/ c3 P
  84. }
    4 L7 u" g9 V) r9 C
  85. , O. Q' m, V7 K! k  G2 @
  86. /****************************************************************
    ! T' B. l9 T7 s: k3 r
  87. * Function:    gotoxy; Q* E/ @& I; u" Q: L' S
  88. * Description: Move the cursor to the specified position on the text screen.1 y: ^- z% H4 Q, L6 ~8 y
  89. * Input:       x: X axis coordinates.! v/ p" O+ U1 B& y# T
  90. *              y: Y axis coordinates.
    1 A* V, B+ f3 P2 G( C
  91. * Output:- Q( p& h% G/ Q# Y. S1 g
  92. * Return:
    1 F0 Y5 _" H5 a
  93. *****************************************************************/2 C# n+ z4 v+ i& k
  94. static void gotoxy(int x, int y)7 a! S) a8 P! m; c3 }1 A; ^- `
  95. {3 ]! i& T% V' L& N  ?* r: I% w! z
  96.   COORD  pos  = {x, y};
    2 J4 {  U# d4 _+ Y* U
  97.   HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    0 _% j' m0 J% ~5 u$ n: J
  98.   SetConsoleCursorPosition(hOut, pos);* ?! p- u+ q8 Y( L$ c# J3 p5 p0 m
  99. }
    , Q. k) v0 r; v9 D9 X4 a
复制代码
5 _3 j+ {  h$ n
3,运行效果, |* g( z: r8 ~( p5 Q3 ~' _% y
RunningResult.jpg & x, \& q& W" K

' [8 {* E% h3 B" t9 O7 {2 J
收藏 评论2 发布时间:2018-2-2 21:41

举报

2个回答
hawk123345 回答时间:2018-3-2 11:20:09
谢谢,学习了
XinLiYF 回答时间:2018-3-6 22:43:46
可以直接移植到嵌入式端,非常方便。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版