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

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

[复制链接]
XinLiYF 发布时间:2018-2-2 21:41
GPS,UTC和本地时间的显示器
' t: V6 |+ E9 x

$ }; Q. q6 U5 n+ k8 o转载来源:GPS,UTC和本地时间的显示器
2 a4 Q/ k- ?! b5 G
' Q& m% ~" A' ?/ NGitHub仓库:http://github.com/XinLiGitHub/GpsUtcAndLocalTime
/ G' ]7 z2 ~+ i. TPS:博文不再更新,后续更新会在GitHub仓库进行。+ u) P; f6 e# f& A- A. q- a

+ b! K0 x+ ]8 H% C8 |) _: {" T* s      GPS,UTC和本地时间的显示器。程序中涉及到朱利安日期的转换,详细介绍见维基百科[Julian day](http://en.wikipedia.org/wiki/Julian_day)。; g. A$ z0 |' {1 ?0 w4 W

/ b  d3 I5 Q5 P) C4 H9 M+ I1,开发环境
$ S: {' y0 T: }4 I% E      1,操作系统:Windows 10 专业版
* _$ N  D: ]( x# M) m) ~" N      2,IDE:Visual Studio 2015 专业版( Y+ l9 W. T  z. O7 Z
5 K# |* d& `& v: N
2,程序源码3 {. f4 F- \; R# r; A/ a+ @8 B# v
      DateTime.h文件
9 S$ p. Y8 x# D- |1 ^: Q5 {/ w; r7 z9 z9 E5 ^
  1. /****************************************************************; m# W0 i7 u8 U+ r  ^: @! K0 o
  2. * Copyright (C) 2017, XinLi, all right reserved.
    + s: G# Q. r/ l+ ~2 G
  3. * File name:    DateTime.h
    : F' H6 ?3 a$ ?1 h7 x0 w$ i/ N% @# |
  4. * Date:         2017.10.17
    . O7 b# Z! N; ]0 I* D  _
  5. * Description:  Date and time module header file.2 s' C3 j; @+ U
  6. *****************************************************************/; A& i! i$ q5 i7 ]1 W2 P1 [) v. X

  7.   Q9 n( I5 o! u+ c. J: _
  8. #ifndef __DATETIME_H6 @  q0 s6 m. n
  9. #define __DATETIME_H
    2 ]1 J( `* @% D  L) ^7 c2 L2 N
  10. + L( k% Y: {% v+ g2 S- m
  11. /****************************************************************
    5 {% a. v; O% S/ e2 }; R
  12. *                        Header include
    # w) h$ H! i7 o7 t5 B8 d
  13. *****************************************************************/
    $ v; T' G* u3 Y: t- Z+ Y

  14. 9 Y+ \( |, R- m9 W3 i
  15. 6 F' V- ~% y( [% |; o  l$ v+ r+ O' I- a1 s
  16. /****************************************************************
    8 f6 u' d8 `( E: [
  17. *                       Macro definition
    4 Y' q% P7 e. }: z" o$ y
  18. *****************************************************************/2 x# a3 \" I: j8 I

  19. 6 \9 |+ A- O, X- a2 `; P  Y+ W
  20. 4 c$ o, M6 O8 c& [8 W
  21. /***************************************************************** a3 ?. q' B! D
  22. *                       Type definition  C* J) l+ M7 t' Z* \0 d
  23. *****************************************************************/4 N6 p3 d& s2 P& a! g

  24. . E- p( X% S3 r
  25. + U  o3 o3 b( x2 X9 E% p# p
  26. /****************************************************************
    1 v2 t, B. O* L. y6 w
  27. *                     Structure definition* l$ B' {) l) t9 t% M9 Y
  28. *****************************************************************/
      ~# K" l7 D8 a5 Q- J$ E) ^
  29. typedef struct4 Z' q* r% W6 h% n) ~& M6 k  a8 n/ G
  30. {
    $ M6 J6 V- n5 f
  31.   int year;
    ( f: v' w4 y8 x0 N
  32.   int month;
    8 t" l7 `2 u& V! P! O! l
  33.   int day;# H. z, N( [- r) i! M
  34.   int hour;
    & s3 E6 C! F) v+ A+ {" D8 v8 `
  35.   int minute;: K$ |' o2 V. Z* X7 v1 u! N
  36.   int second;! R% I1 ~! g% _, f' n+ r3 n$ d
  37. }DateTime;/ H$ E* U5 i/ u$ O2 y" ]
  38. - m. T6 J; X& J5 X2 D- d7 [7 t" r
  39. typedef struct
    6 d9 Y$ n# W* u: F" G; R
  40. {
    6 t, E: l6 S( O( s: [, j, O  L
  41.   int week;8 @5 s  E# Z+ v5 C; Y' |+ X6 ~
  42.   int second;
    ! f- F% l6 R) v  Z8 H* u" V
  43. }GpsWeekSecond;
    ; u: n! b9 z1 K* B7 {
  44. $ _- S) V( b) Z3 x' a( q

  45. : X3 i) s1 x% }* W/ E0 h( W$ n
  46. #ifdef __cplusplus# V( p$ ?/ m1 F8 S
  47. extern "C" {/ b. r- W5 w% }' Y9 R
  48. #endif  /* __cplusplus */
    8 l8 }5 L/ C% k) ?! A
  49. $ k4 ]+ F, n5 l+ E) c/ }' a/ ?
  50. /****************************************************************
    & `5 W; }( V, z+ h
  51. *                     Variable declaration
    3 x% x& u1 Y/ b. v
  52. *****************************************************************/: Z. [6 q& I  o0 G3 Y* w
  53. 0 |. S- N8 m: G# M; ~2 W) Y

  54. # I) w$ K, \7 \8 e5 m
  55. /****************************************************************
    $ c" Z  h, [: ^: u5 A/ r% p
  56. *                     Function declaration) @* }  [' U! t$ X1 H
  57. *****************************************************************/
    8 x7 P" a: `6 L/ I  n  h9 [
  58. DateTime GregorianCalendarDateAddYear(DateTime time, int year);
      }- _7 g1 r* ]' k2 _/ B
  59. DateTime GregorianCalendarDateAddMonth(DateTime time, int month);
    - m) |$ j0 {/ p
  60. DateTime GregorianCalendarDateAddWeek(DateTime time, int week);+ d6 \  \& w$ s- r6 j
  61. DateTime GregorianCalendarDateAddDay(DateTime time, int day);" ?! W1 z1 x0 s1 Y4 B% U
  62. DateTime GregorianCalendarDateAddHour(DateTime time, int hour);
    * F! K' H0 G5 o1 o% y8 _7 E
  63. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute);
    ' [: ^4 `. g7 Q6 u
  64. DateTime GregorianCalendarDateAddSecond(DateTime time, int second);
    & U8 |  i- ^' p- Z
  65. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time);! X1 T3 W: O- g; ?# H; P& E& b
  66. double GregorianCalendarDateToJulianDate(DateTime time);; _5 C* @9 C  {0 z1 K$ X6 Y
  67. double GregorianCalendarDateToModifiedJulianDate(DateTime time);
    " X' @4 V$ H+ x0 I! ^. [
  68. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year);
    " \# K6 U; Y5 k0 b' c+ O8 A
  69. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month);2 G+ [) D) A  `8 P: Z
  70. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week);/ d$ K; g8 g' k2 t
  71. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day);* M) R$ N! L+ v8 e  u5 p1 @
  72. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour);' i3 c3 j6 h: r) }4 S; l; c
  73. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute);
    5 y; n6 E! F% P: c9 S# ?! N8 e; O: _
  74. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second);
    6 K, z4 d. C6 J% s" S, N) v! |
  75. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time);" i) d3 a2 q: I4 F2 d2 U: X" K
  76. double GpsWeekSecondToJulianDate(GpsWeekSecond time);* W' Q% x2 Q2 D( o/ ]. `
  77. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time);7 J5 q, M/ \* p8 c" U6 ~" b* I1 L
  78. double JulianDateAddYear(double jd, int year);$ o3 D$ @' D+ r1 T+ ~1 N, j/ t3 c- X
  79. double JulianDateAddMonth(double jd, int month);
      Q( _  {/ v/ |+ B5 o5 X
  80. double JulianDateAddWeek(double jd, int week);
    $ ?' `2 I; T) \/ u6 [# {- A
  81. double JulianDateAddDay(double jd, int day);
    7 N% U4 D0 W; d- X5 p8 M" i
  82. double JulianDateAddHour(double jd, int hour);( Y, I) B+ ?/ Z* r7 S3 [& a1 f$ J
  83. double JulianDateAddMinute(double jd, int minute);: |1 z' y# P* S# O) q$ i4 O) d: ]7 O0 i
  84. double JulianDateAddSecond(double jd, int second);
    , ]$ F4 [% _$ \7 h' M, C5 W
  85. DateTime JulianDateToGregorianCalendarDate(double jd);
    8 i) I3 u4 t7 L- r& V, v; M2 Y% M! G6 v
  86. GpsWeekSecond JulianDateToGpsWeekSecond(double jd);4 {) e- p0 C( L+ X
  87. double JulianDateToModifiedJulianDate(double jd);5 c7 o  g7 x. I. g  f- R" u% [! w
  88. double ModifiedJulianDateAddYear(double mjd, int year);
    ) d- n2 V5 L3 q( ]0 l8 J: Q/ k
  89. double ModifiedJulianDateAddMonth(double mjd, int month);
    : }  C2 k; ^6 d* v$ {
  90. double ModifiedJulianDateAddWeek(double mjd, int week);/ H# r& J4 C5 r5 w9 H5 ]$ t
  91. double ModifiedJulianDateAddDay(double mjd, int day);0 L( {* t6 |5 T7 j8 I5 l: Y
  92. double ModifiedJulianDateAddHour(double mjd, int hour);
    ; N( x; X# {  t
  93. double ModifiedJulianDateAddMinute(double mjd, int minute);) }$ v+ F8 O9 {
  94. double ModifiedJulianDateAddSecond(double mjd, int second);
      Q6 p! }9 Q. I5 c+ A3 Y
  95. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd);
    9 ?' ?8 r' M5 O
  96. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd);; K% ?1 |8 w; V8 K
  97. double ModifiedJulianDateToJulianDate(double mjd);( ~. ^  g6 h5 w6 n

  98. 7 L9 v2 I. C! M! y/ h7 N& {9 l& v
  99. #ifdef __cplusplus
    3 f( w/ o! _9 J. i$ T) ^
  100. }
    2 A9 h. E6 r9 e$ D) `
  101. #endif  /* __cplusplus */; c9 Z( Z0 h6 k2 _& ?

  102. 0 b2 V# b  m7 B
  103. #endif  /* __DATETIME_H */) \- }; E) E  \, _
复制代码
6 `0 b( P( Z3 j. F1 Y' _
      DateTime.c文件4 n3 G; h! E( ~: W; a6 b3 F+ m
  1. /****************************************************************- x% x$ S+ w" L. r9 J( Z' X
  2. * Copyright (C) 2017, XinLi, all right reserved.
    7 I( D8 P8 V& j/ P
  3. * File name:    DateTime.c1 Z: B7 e% {# p6 k6 h
  4. * Date:         2017.10.170 T. ?1 b4 a/ U6 D6 A& b
  5. * Description:  Date and time module source file.# u- s5 m) c' T' Z3 H' w" w
  6. *****************************************************************/( K& s* v! ]4 G* p
  7. 2 K; p8 G& }$ H( R
  8. /****************************************************************4 v1 w; I6 j; x
  9. *                        Header include
    + n( M) O3 K  Y
  10. *****************************************************************/8 v2 y9 e( ]$ j0 j
  11. #include "DateTime.h"4 n5 \$ {. k/ I6 P6 J# {2 m; X: K

  12. + D5 u( v6 Z: S" @" }
  13. /****************************************************************- ]+ B* R5 n1 V; y6 B/ B7 }. }+ l
  14. *                       Global variables# u5 I% t7 J: ^; g6 c' z' l* X
  15. *****************************************************************/
    ) }) p# \8 o7 B, ?

  16. 6 K9 f/ ]/ o6 H- ?$ E! I
  17. 7 g: s; n) e4 Q* {, C3 F0 m! W
  18. /****************************************************************$ u4 @$ G' D9 V) j0 t8 s$ S7 l$ @
  19. *                     Function declaration
    4 Q- T; N8 t+ C) D- h2 V# {
  20. *****************************************************************/
    * @* K- u: @6 E

  21. # a0 Z2 @* ]* c5 H7 P% c3 m0 F

  22. 7 Y  l, |4 \& X% N& W
  23. /****************************************************************8 Y! [6 i$ U  ~, c+ g- Q* o2 T$ |
  24. *                     Function definition: c3 L2 D/ D! d( T6 o' V  G+ \0 |
  25. *****************************************************************/
    % ~( h  u8 I8 v2 m; M

  26. ' r& @, X5 `* R7 ^& o7 }* V
  27. /****************************************************************, X: Q4 S; e7 h
  28. * Function:    GregorianCalendarDateAddYear
    5 t( T, C" \1 o6 h- i
  29. * Description: Gregorian calendar date add year.$ h7 t) c5 I: \/ D3 T, B0 D
  30. * Input:       time: Gregorian calendar date.2 l2 a7 R6 I, m' k, W" h
  31. *              year: The number of year to add.
    ; m0 G4 K7 t8 z3 f  ]2 @; \' k
  32. * Output:2 @  u8 T1 ]* e7 `
  33. * Return:      Gregorian calendar date.% s+ G! F0 y/ q+ I. c- |( H+ p3 s
  34. *****************************************************************/8 l5 k* u! s- N( F  f$ H( w0 X! l- `
  35. DateTime GregorianCalendarDateAddYear(DateTime time, int year)
    / |: P6 M. c. C1 F; a% Y3 P5 r
  36. {  H5 Y5 L0 S  ?( \: G; s8 [6 w" Q
  37.   time.year += year;! A8 z* X/ g4 F+ v' {! w$ ^

  38. " I4 h6 d' S2 [* u7 U9 X* z* \
  39.   if(time.month == 2)
    5 K  e; f7 F3 ~
  40.   {
    : j8 `$ R3 n! V) c% ^7 s& ~
  41.     int mday = 0;/ N$ J9 H1 k" x+ T
  42. + i$ P+ G7 F8 B3 `# F. I& L+ K. _
  43.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))7 [2 R0 _  l- I; }
  44.     {6 O' `; |4 i/ A; m+ k# e+ b9 q
  45.       mday = 29;
    # U8 ?" B' {" |# C- W- m
  46.     }* B/ r& k0 B* L( V# O
  47.     else+ ?  H' v. G0 y
  48.     {
    " P) r" w1 G  t
  49.       mday = 28;
    7 N- P- G( S1 Z2 W- Y0 r  ^
  50.     }1 ~% L) n: L8 X

  51. 4 r6 G- c, O$ f: Q0 p9 G
  52.     if(time.day > mday). d9 k; g! o4 Z
  53.     {7 `2 ~3 ^  W% U
  54.       time.month += 1;
    ) Q; D  s$ K2 T' H% p+ M9 [
  55.       time.day   -= mday;: b6 F- Y  z# D6 ?) e  w% M& {
  56.     }) l2 a/ M$ M  v0 r. h, a) e* l
  57.   }
    $ v& Q, W. ?, Z- u& A, _6 j

  58. : P$ Q' \4 x) [
  59.   return time;6 J4 p7 R7 L3 u: ^
  60. }
    5 ^# K7 i7 q( B& U3 T8 V* H

  61. 7 w& p( j% ^5 `
  62. /****************************************************************
    ! I0 v. T2 M. {2 l1 q9 P+ ^
  63. * Function:    GregorianCalendarDateAddMonth
    ( q& X2 k) a& q( U. r
  64. * Description: Gregorian calendar date add month.$ y$ j7 `+ S2 v1 C
  65. * Input:       time:  Gregorian calendar date.
    + n. ^8 y( [; n0 E' J' {3 ]
  66. *              month: The number of month to add.+ B* E$ J3 u( e6 s: o
  67. * Output:0 p; F$ d/ |0 a3 ^! a
  68. * Return:      Gregorian calendar date.
    7 d0 F0 g2 n( O& z
  69. *****************************************************************/
    , s4 |3 k& R+ ~% ?
  70. DateTime GregorianCalendarDateAddMonth(DateTime time, int month)
    9 g" B7 ?4 F( X2 \
  71. {
    - U/ |# K: ^) h4 ?, X: b
  72.   time.year  += month / 12;( V; C$ `/ X: T1 m8 w
  73.   time.month += month % 12;
    0 J3 R7 a( f! M: b5 ?% L

  74. 7 \9 [) g- |3 Q9 H- B9 D* c
  75.   if(time.month > 12)
    ; J9 O: o0 R2 r3 H; ^9 ]8 ~0 l
  76.   {0 O- w9 i6 t* w/ }+ U
  77.     time.year  += 1;
    * i/ G( m3 U, @$ b
  78.     time.month -= 12;' Z$ j& k5 q& A1 B! t1 T  ]( K
  79.   }
    3 Q- N, g' n1 O9 S* r& K2 q' z  r

  80. 5 o! D+ }$ M6 `. {# D4 f( o
  81.   int mday = 0;
    5 L+ I+ {' e2 K; q
  82. ! [6 u2 M( K$ [" `
  83.   if((time.month == 1) || (time.month == 3) || (time.month == 5) || (time.month == 7) ||% `: V, m6 ]6 K8 o. U
  84.      (time.month == 8) || (time.month == 10) || (time.month == 12))
    / h  B+ J6 ?, C( a& {
  85.   {  e: c- d& i! v( O: U, ^5 t
  86.     mday = 31;
    ! t! p. t2 w9 T
  87.   }
    " L! D, c1 }( o6 ]2 J
  88.   else if((time.month == 4) || (time.month == 6) || (time.month == 9) || (time.month == 11))& o6 e$ Q+ R. n$ \/ U' J
  89.   {
    # W( i# x9 v! z: F: S2 f
  90.     mday = 30;! A' R! K! n9 R+ ]; N4 C' d. J
  91.   }7 ]+ A2 c: E0 Z5 C& T
  92.   else! C. D9 J) y( R, _  t# |# o& X
  93.   {; v5 X. B3 r. \+ ^$ i( n
  94.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))
    . S# e/ |9 B& Z$ B: _6 z% p: V% h
  95.     {& y4 x; J% R+ [% B
  96.       mday = 29;
    : z1 |3 m5 Y1 n3 M  g( f
  97.     }
    ) v2 r4 s% D6 r4 y
  98.     else: f4 s7 e& H$ b* M# p6 l! Z( {
  99.     {$ _6 b& v0 a, f3 |# t% H# _9 H+ t
  100.       mday = 28;' K0 }* l( j: S; Z8 Z& t
  101.     }2 P! {! D. H9 V1 R4 S2 l) o( [
  102.   }7 h& d0 l+ A* U7 `6 d
  103. 5 @! ~. g, L4 P/ V6 b  C1 e  C2 b& i  B
  104.   if(time.day > mday)0 B" f/ [5 k9 \4 W
  105.   {
    0 ?3 y, |/ d2 H( w6 t: f
  106.     time.month += 1;
    & Q2 l+ e7 \+ U, }9 @; h
  107.     time.day   -= mday;5 l# C2 T% O3 k# K$ ]. l! ?. p+ m
  108. % K' L3 o, V- S
  109.     if(time.month > 12)
    ' i& l' i4 `$ g8 I% d- ^
  110.     {: u4 }6 R% V. U" P( b1 E! Z
  111.       time.year  += 1;; ^( G, s2 h! J& ?6 z5 l: F
  112.       time.month -= 12;
    % Q6 I) o* t* w+ g# P
  113.     }, ^  @/ ~, I% B  }
  114.   }
    , l" y8 K- m* z* U7 q6 N! i
  115. 0 d; Z7 g/ t- E$ }) ?
  116.   return time;
    2 Z7 I/ a7 o$ I; P: ]7 d
  117. }
    & F$ Y8 N1 J' O, k, x, x2 o! L

  118. , W' j  M/ u2 S- h2 j8 ^
  119. /****************************************************************
    0 O" g, \  R# }# m3 W
  120. * Function:    GregorianCalendarDateAddWeek
    7 g2 }' L; x1 E  e  @* @
  121. * Description: Gregorian calendar date add week.
    ! ?& [" b8 Z! }! Z0 Y8 S  b
  122. * Input:       time: Gregorian calendar date.+ l' ^, x' ]2 K4 E9 y5 R* f' q& {
  123. *              week: The number of week to add.- w% H$ s3 J$ x6 Q6 s& a. ?" c2 ]( P
  124. * Output:
    & S, h2 J# X1 z, P' D/ ]
  125. * Return:      Gregorian calendar date.+ c- A2 y* W: l6 d1 A6 e6 z5 ?
  126. *****************************************************************/; g" }' z) E6 Z; u
  127. DateTime GregorianCalendarDateAddWeek(DateTime time, int week)8 L8 Q9 K- _& \. F! A" K  B
  128. {  n2 \# G2 p7 Q
  129.   double jd = GregorianCalendarDateToJulianDate(time) + week * 7.0;
    & O- U; ?2 w' |$ [( ~

  130. : j9 Q# b% H- g1 N( o* X* p% g
  131.   return JulianDateToGregorianCalendarDate(jd);
      W* t: L! R$ Y/ V) E( K6 ]
  132. }
    % B1 I, B( K  L7 k. _: W+ n. s

  133. + _& k5 Z4 h7 Z4 O4 `. h3 h) }: D/ l# ^
  134. /****************************************************************
    # T7 @. @; D+ K( o' `% w
  135. * Function:    GregorianCalendarDateAddDay" I- {1 |; }* ?
  136. * Description: Gregorian calendar date add day.
    / @( T4 p! t( @% W: j/ X5 ?
  137. * Input:       time: Gregorian calendar date." R3 @% _6 F+ Z1 R$ a( \
  138. *              day:  The number of day to add.
    & [1 m% P! {0 d) l# F
  139. * Output:7 G9 a' W( |1 |3 X2 v  M! l( {) P
  140. * Return:      Gregorian calendar date.
    : J6 q5 ~% X6 M' v; ^$ H5 N$ l
  141. *****************************************************************/
    # M* T8 T  f/ U$ }5 V/ h! j. f
  142. DateTime GregorianCalendarDateAddDay(DateTime time, int day), K# \' G+ c9 V; ]  B
  143. {. I/ W$ q! c" i. ~- W
  144.   double jd = GregorianCalendarDateToJulianDate(time) + day;
    / N7 g, K- ^$ ]9 E* c: A8 n
  145. 1 @: R% R$ L. [- E3 ~- _8 M! \
  146.   return JulianDateToGregorianCalendarDate(jd);
    ' j& |2 k7 W# Q( \0 y3 M
  147. }: c6 p3 u' p0 F6 Z+ C# v
  148. " L0 X/ K* X- Y1 u( N0 z
  149. /****************************************************************
    ' R0 j1 ^/ m! ?9 ~% H1 o/ p+ U) [
  150. * Function:    GregorianCalendarDateAddHour
    . d9 F. y. J6 ^  q) X
  151. * Description: Gregorian calendar date add hour.
    ' z% L5 w' M3 L" l5 i. r1 Z8 k7 Y
  152. * Input:       time: Gregorian calendar date.0 W; M) Y5 `: |
  153. *              hour: The number of hour to add.( E. M8 v% X0 ^; w0 z: y2 B
  154. * Output:
    % E2 n6 g: P! y0 I' y3 @  S
  155. * Return:      Gregorian calendar date.' K& I/ v# I  Z: b2 |) ?
  156. *****************************************************************/
    2 q! q; s. t: u+ r# l" H  G4 Z
  157. DateTime GregorianCalendarDateAddHour(DateTime time, int hour)8 F& r4 O4 w& G! K/ @4 `& X
  158. {
    8 r7 t- X7 g5 t: V5 Y  m! U; y
  159.   time.hour += hour;8 i7 @* O) e% @5 f2 _( s# B

  160. - ]3 M2 D+ a, i, ?1 g3 z& y2 A
  161.   double jd = GregorianCalendarDateToJulianDate(time);: X( {5 A( b2 D$ A( S
  162. 8 }+ j- r/ F& b& F
  163.   return JulianDateToGregorianCalendarDate(jd);
    . l3 |% K  g" c1 x) f. U
  164. }  U! v! J: k& T" @# O+ D' c/ v3 Y
  165. . |% v) T% b  m
  166. /****************************************************************
    , e5 \0 p" H2 ~
  167. * Function:    GregorianCalendarDateAddMinute
    * t' X6 G: u& x3 M9 ^2 L, v
  168. * Description: Gregorian calendar date add minute.
    # U0 F1 w& |9 [% c
  169. * Input:       time:   Gregorian calendar date.
    ) N8 V  j, V  m- L6 L. t5 a
  170. *              minute: The number of minute to add.6 M/ Z( ]- _  x  u
  171. * Output:
    : J3 W: P9 ~# U0 E* n3 C' P
  172. * Return:      Gregorian calendar date.: b/ }# a) ?3 U" t# O
  173. *****************************************************************// H7 t* }( m( `! E  @
  174. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute)
    / P% Y: [: o5 p  w$ y. D
  175. {2 m2 |* _9 a( Z) _) r5 V
  176.   time.minute += minute;0 j( E* g8 C& J0 c3 D9 O" C
  177.   H# y" _- F9 t" L* T  [! E+ f
  178.   double jd = GregorianCalendarDateToJulianDate(time);/ A* X& Y  k6 \( c$ p
  179. 9 Q& {8 y/ F2 r& `; V- E; y) a
  180.   return JulianDateToGregorianCalendarDate(jd);
    . y9 N# d5 H. a, o
  181. }7 H6 F' ~7 d- D4 m/ x- J
  182. ) Y) `2 ~: G4 ?* t( B0 y
  183. /****************************************************************0 x. V6 C: d3 }
  184. * Function:    GregorianCalendarDateAddSecond
    0 f& r4 d+ _1 _5 j7 S4 l! \9 G
  185. * Description: Gregorian calendar date add second.
    $ f6 ~2 I" j  x- h
  186. * Input:       time:   Gregorian calendar date.$ [# ?6 C# p4 K7 t8 w
  187. *              second: The number of seconds to add.
    / K/ b# y7 h: A9 D5 D
  188. * Output:
    % _( Z3 o/ _+ ]! E5 u
  189. * Return:      Gregorian calendar date.
    ( b4 F3 @. ?( S3 p; K6 [
  190. *****************************************************************/
    / V  ^  k, A- o' h. |$ @8 I
  191. DateTime GregorianCalendarDateAddSecond(DateTime time, int second)
    + N. L# [/ M6 W- X
  192. {4 x# W6 a1 k  M; |
  193.   time.second += second;
    1 S4 `* @) u1 Z, `

  194. 7 ]/ g1 J% T& x# n: k/ O8 Q! b2 w
  195.   double jd = GregorianCalendarDateToJulianDate(time);6 O5 J+ I2 L( J- @7 E4 |4 c
  196. " N. Q- K3 I) D! r
  197.   return JulianDateToGregorianCalendarDate(jd);$ \' o( \& a5 K- ~0 s
  198. }' a; ^& s5 x$ }2 l, ]

  199. 4 L. [: M% o. \( s6 Z; u6 U
  200. /****************************************************************
    . ?* ]# i# I+ ~! G" \: c1 G
  201. * Function:    GregorianCalendarDateToGpsWeekSecond
    ! V1 H9 a9 r* \
  202. * Description: Gregorian calendar date to gps week and second.
    ' }8 I6 m8 H$ U8 e/ }" Y
  203. * Input:       time: Gregorian calendar date.
    % N( Z/ u4 i- h( \+ ^
  204. * Output:
    4 c3 u. ?5 ~7 \0 `# F
  205. * Return:      Gps week and second.
    4 y% Y# x# A2 A1 P! \, u% a/ P
  206. *****************************************************************/
    : r: y3 }$ m5 s1 @/ V' z; E
  207. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time)
    6 |6 |0 p5 v# K
  208. {, L: S" h" n8 n( p7 c# _
  209.   double jd = GregorianCalendarDateToJulianDate(time);
      ^+ R! o) D4 z' a2 `) V
  210. : M: E- a7 G" R7 S
  211.   return JulianDateToGpsWeekSecond(jd);
      N/ t" S  x) e
  212. }- A# d& Y/ Q8 N& R; x* _4 D

  213. 7 B" l- `9 U& ~% z; J8 d' Y
  214. /****************************************************************
    4 M( U. `- @: D, c! ]% j# }
  215. * Function:    GregorianCalendarDateToJulianDate
    " s4 [2 v. l$ `" X0 @& u7 X
  216. * Description: Gregorian calendar date to julian date.
    / r2 s* H( K, X. s* c$ T: P% Z. N
  217. * Input:       time: Gregorian calendar date.# j, Z! o7 U4 o) G8 n
  218. * Output:  Y, U: i0 ?# [. @- i
  219. * Return:      Julian date.0 N4 t) x6 s: c3 A
  220. *****************************************************************/
    $ F; `! V" N. l7 L
  221. double GregorianCalendarDateToJulianDate(DateTime time)* o8 D* `3 Z: q+ h3 R
  222. {9 h" Q( E9 \2 O% ~% I: N' W
  223.   int jdn = (1461 * (time.year + 4800 + (time.month - 14) / 12)) / 44 s  a7 F1 Y' Z5 v9 Z, X8 M
  224.           + (367 * (time.month - 2 - 12 * ((time.month - 14) / 12))) / 12( R/ r% [" N+ l9 u
  225.           - (3 * ((time.year + 4900 + (time.month - 14) / 12) / 100)) / 4$ d8 t* z: m) U0 P
  226.           + time.day - 32075;
    # @) Q( P9 S- j- f+ N* g& T
  227. ) F1 E9 N9 }; ?. ]
  228.   double jd = jdn + ((time.hour - 12) * 3600.0 + time.minute * 60.0 + time.second) / 86400.0;8 n0 V0 M6 `, ^$ P* H. ?0 q
  229. $ m9 h7 v* n7 y% L2 W2 s
  230.   return jd;! @6 p& l; P+ |8 E
  231. }
    " S; F4 N% C4 v2 E' q

  232. : H  `9 f. a& w, X/ d3 ?
  233. /****************************************************************
    ( N4 Q$ Y% k9 c: N  s$ E4 i# Q
  234. * Function:    GregorianCalendarDateToModifiedJulianDate4 H$ Q, y/ x- d. S, `7 X
  235. * Description: Gregorian calendar date to modified julian date.& x: g$ a. B4 n9 }5 @
  236. * Input:       time: Gregorian calendar date.
    3 ~) k9 j7 v: Y- s& H
  237. * Output:
    5 C) d# I' u" t; `
  238. * Return:      Modified julian date.
    - ^2 {) d3 B6 [7 h; I
  239. *****************************************************************/( i$ g/ J( W1 Q% I: h
  240. double GregorianCalendarDateToModifiedJulianDate(DateTime time)7 K: ]3 h' H6 E/ g
  241. {
    + f  _; R$ `- y! A3 ]2 B
  242.   return GregorianCalendarDateToJulianDate(time) - 2400000.5;
    + G5 b& B3 s( m) ^4 F
  243. }& x2 \6 t" P* k

  244. , s. X- g5 }, G: M. @& c3 H0 W
  245. /****************************************************************" M0 P( ]0 D* q1 @; n
  246. * Function:    GpsWeekSecondAddYear. E& }+ [! F7 O" H% n1 a
  247. * Description: Gps week and second add year.
    2 [3 U3 q  O7 X. N  o
  248. * Input:       time: Gps week and second.+ g# v& [& ^8 Y# b1 Q1 f5 i: v
  249. *              year: The number of year to add.% t8 O7 h; \2 u& t" p+ ]
  250. * Output:/ k: S) T/ S. Y
  251. * Return:      Gps week and second.
    6 L' p, A/ |! u7 b3 V
  252. *****************************************************************/
    ; U; X$ s+ ?" Q+ H* N- i' J
  253. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year)
    " A  x. `8 w0 j7 @( U8 z3 {. y
  254. {$ e  d. C# J4 r7 ~
  255.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);! q( D* P* r! T, E  F" a& C
  256. * ]0 Y7 r1 i/ T1 i& x% `
  257.   date = GregorianCalendarDateAddYear(date, year);
    5 I* k$ l8 B$ r# F, n& M  {

  258. , I* [" Q! N, A) X! M
  259.   return GregorianCalendarDateToGpsWeekSecond(date);
    : l5 U' z3 Y8 ?! b5 M8 y( Y" y3 @
  260. }
    ' {* t% f$ p$ C. I: d( E

  261. ! ]5 {% A  X* a3 x! T/ \
  262. /****************************************************************
    * a* h% P1 R2 U6 Y
  263. * Function:    GpsWeekSecondAddMonth
      N" O: |& j$ k
  264. * Description: Gps week and second add month.' Z: J/ @' P, Z
  265. * Input:       time:  Gps week and second.
    * y% A* ~$ Y# i
  266. *              month: The number of month to add.
    : O2 Q' a7 O5 K7 W5 Q
  267. * Output:" K: H9 n; j$ X; @  L4 u- H. }
  268. * Return:      Gps week and second.
    : @7 S5 M. r. t% W
  269. *****************************************************************/3 W. G8 t# R9 Z( Z, {  B
  270. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month)
    0 j4 d7 [: v0 ~
  271. {
    7 {. t7 `/ V! |7 \$ M8 q
  272.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);# V8 \5 c8 A8 o4 @1 k. i6 R

  273. * b/ @: h' l, @0 E% b( j
  274.   date = GregorianCalendarDateAddMonth(date, month);+ H) U( A1 A" f6 v0 c& p4 M
  275. 4 H$ d: |) u; c$ L0 }. J# M3 K  l
  276.   return GregorianCalendarDateToGpsWeekSecond(date);
    3 q. A) T) U! o0 r; ?
  277. }
    , C/ |( \$ M6 x9 l

  278. : u' v  T: o8 @) v
  279. /****************************************************************
    # [" r5 A+ t( l! |) w
  280. * Function:    GpsWeekSecondAddWeek
    4 B4 X' x, R2 [
  281. * Description: Gps week and second add week.7 L6 M. K" k5 i0 c9 V" ?' |
  282. * Input:       time: Gps week and second.
    & h  P) i+ \1 E; Z" O6 w; x! t
  283. *              week: The number of week to add.
    6 F' d! r1 ?: b( A- S8 h$ Q
  284. * Output:
    ; w8 M" J/ ]* G2 K8 T+ s3 U
  285. * Return:      Gps week and second.
    ) R$ O7 W* f: q+ B( W
  286. *****************************************************************/
    ; S8 o/ M4 W( V
  287. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week)) |# C. X0 w$ K; P& c8 A; z% f
  288. {0 N" H5 w! Q, N) y, {2 `3 m' k) X
  289.   time.week += week;, N! K4 E2 a4 G/ s
  290. : X3 e4 y( T* q4 ?- I' ?4 l7 x! J! x
  291.   return time;
    ' U8 H# j! S: N/ l/ L
  292. }
    / B5 a: C+ |5 e3 @

  293. 2 x8 J! p( E0 C$ @
  294. /****************************************************************# r) r. q' a& U
  295. * Function:    GpsWeekSecondAddDay
    * s9 @& y7 L( C& B2 g% C5 C# A9 l
  296. * Description: Gps week and second add day.* X+ ]+ f* y7 t& N
  297. * Input:       time: Gps week and second.9 {4 H3 {- ]4 i6 Q  `
  298. *              day:  The number of day to add.  J1 q0 m: T1 i1 ?9 K' f0 p
  299. * Output:
    2 T+ S* n; Y" F% N, v
  300. * Return:      Gps week and second.; K, L6 V' x* O  V. P3 W3 o
  301. *****************************************************************/- ^8 K6 J1 @3 D7 ^1 ], Q( r' B4 e
  302. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day)
      M- o5 l! m/ b' G# ?8 U
  303. {5 Q- [, z6 d; U" z! @
  304.   time.week   += day / 7;# h' I) S# y$ T9 |6 T& M; p) p1 N3 [/ i' r" l
  305.   time.second += day % 7 * 86400;5 ]0 c6 j! e( p$ G

  306. ! s5 S6 t! ?( F  o! ^
  307.   if(time.second > 604799)
    ( e' ^9 X1 b6 }- f
  308.   {
    , _- v, {& D, j* Y* Q$ P
  309.     time.week   += 1;% e4 S" r- [4 j3 M$ A
  310.     time.second -= 604800;7 p; w0 P" h8 b
  311.   }
    7 p1 w5 X$ e7 N" v

  312. . O/ f* M9 B! M, a3 L0 D
  313.   return time;3 Z( r7 b9 G/ ]9 k* V# U' L: \7 A2 t
  314. }3 g  p3 o, h1 r  o1 f- p

  315. 5 t' K. K1 C+ x+ k  D: Q( c
  316. /****************************************************************
    0 u* H- ~6 A$ D
  317. * Function:    GpsWeekSecondAddHour
    8 u% g8 Q+ U. S6 h
  318. * Description: Gps week and second add hour.
      E/ S3 R4 `: w# i: j5 G" ^
  319. * Input:       time: Gps week and second.
    9 V* z: P- |! v
  320. *              hour: The number of hour to add.
    2 C' y* k4 O5 s
  321. * Output:, @" ~6 E2 C+ K3 k; O, a
  322. * Return:      Gps week and second." ]- F# f) ]7 X
  323. *****************************************************************/
    3 O' R8 X( y7 U3 [& e; P
  324. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour); a9 q" k8 F% o, N& `" \) u  \
  325. {3 h4 ]8 K/ q. Q  T
  326.   time.week   += hour / 168;
    8 I0 x# E4 s- U  M: V& o2 [7 z
  327.   time.second += hour % 168 * 3600;5 @4 k6 L9 q, \5 o; v% G8 n/ Z
  328. " y- r) O. \/ i0 |+ Q# t
  329.   if(time.second > 604799)
    8 y& c* S" k* h: l2 T3 E0 s
  330.   {
    & q5 b! G1 t4 H. z  _$ Z
  331.     time.week   += 1;
    3 g" @; z, ?, d- V
  332.     time.second -= 604800;3 k5 Y2 q$ ?2 G/ |( _. F) g
  333.   }
    # ?6 a0 T" E8 q2 b0 q% n; d9 Z! A
  334.   2 v! {: t2 ]& H3 @
  335.   return time;
    - k0 M+ |) `1 r2 I8 M6 N- H9 P
  336. }! R$ _, ^" {' i4 E
  337. . c2 o% N9 ^& N: n0 q9 M
  338. /****************************************************************
    0 O* y. m  q( M, A, J
  339. * Function:    GpsWeekSecondAddMinute
    $ L( ?& X+ y. Q! b
  340. * Description: Gps week and second add minute.
    6 P$ h. |( d+ z5 h, p3 D
  341. * Input:       time:   Gps week and second.  @! T% q8 C( o/ C1 y
  342. *              minute: The number of minute to add.5 Z' M$ O+ W1 O
  343. * Output:9 C& H, l  y5 x8 J- q# w2 y
  344. * Return:      Gps week and second.
    # z" d7 T9 S1 Z
  345. *****************************************************************/
    + h- p2 S1 u4 I
  346. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute)
    # z9 \2 e& s: ]/ W
  347. {4 {3 T1 k9 i9 ^5 f
  348.   time.week   += minute / 10080;
    6 n6 Y2 C: L/ s7 g: v$ B2 W
  349.   time.second += minute % 10080 * 60;
    + a8 Z; O/ w* w# D9 [8 P
  350.   ; @$ X% }9 V8 \0 N! T
  351.   if(time.second > 604799)
    9 [: Q# _: T, [" g4 d5 ]
  352.   {
    9 t* }* L% D. U$ ~, e
  353.     time.week   += 1;
    4 E* t' f" j+ b& a( {
  354.     time.second -= 604800;8 \1 w# e* H" v$ R! a8 u6 S6 k& c
  355.   }% ~6 S4 w9 _6 ~# \
  356.   
    ; K4 Q" s3 @3 f( `! h. I
  357.   return time;! A, f6 m2 ]3 O: S/ T
  358. }7 M& j8 p( }2 j& G
  359. 5 H2 |/ T# ~8 x
  360. /****************************************************************
    ! ]/ K- @- Z' }. A9 H
  361. * Function:    GpsWeekSecondAddSecond
    : {0 g( C; M6 ~9 C( }/ s, z8 F
  362. * Description: Gps week and second add second.
    4 Z9 F; S! \2 C) ?
  363. * Input:       time:   Gps week and second.
    ( V$ _% K6 N4 K0 o! C8 [# _
  364. *              second: The number of second to add.- n" ?5 s: a& K- `7 {; H$ ]; W
  365. * Output:
    - m0 q2 y+ n  {9 u5 v9 K# v
  366. * Return:      Gps week and second.
    1 ~8 C6 M* Q  V7 q2 c1 `& F, F
  367. *****************************************************************/1 G7 _6 _4 j/ C/ o8 V3 X4 c
  368. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second)
      X7 l) s: c- v+ k$ \1 V( _
  369. {% j5 ]9 T5 [; p8 i# {
  370.   time.week   += second / 604800;
    ( E6 s7 J; L/ A) |2 F
  371.   time.second += second % 604800;8 r1 B5 x+ C  U7 u3 Y

  372. * L6 W% P2 D) c& z
  373.   if(time.second > 604799): W4 N. O" p: d% V2 d( _$ P
  374.   {
    7 Y& V# X7 M0 L( I8 e, N$ i9 e
  375.     time.week   += 1;8 ^: z% ^% T) S8 w9 K" T9 l' T
  376.     time.second -= 604800;
    - f: p2 n1 q2 }; T6 X' @3 X% f7 P, Z
  377.   }7 b- k& |! Z6 T% D0 }7 |* v0 }
  378.   4 P- Z: w: C& q% T( O; I
  379.   return time;) s& ~1 d) e6 o" N
  380. }1 P: F" O* j$ F: R% K; {
  381. , D! O5 F  o0 E* w3 \: H
  382. /****************************************************************
    4 P2 w; X4 Q, t- y
  383. * Function:    GpsWeekSecondToGregorianCalendarDate. J4 q1 W, m% s
  384. * Description: Gps week and second to gregorian calendar date.3 C6 W+ D4 K& I! h" ?/ B3 {
  385. * Input:       time: Gps week and second.8 T8 W+ ~% k7 a- Q! ?
  386. * Output:- }- {; l) x% W* l
  387. * Return:      Gregorian calendar date.
      n0 H+ l% n* v6 d- B/ c/ B/ `
  388. *****************************************************************// |! b+ O3 N. G$ E2 T8 g
  389. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time)
    + G0 L" }+ X7 t( M; a
  390. {( O: A# D) [2 b" A, _  P* U8 y2 D) w
  391.   double jd = GpsWeekSecondToJulianDate(time);! L$ N1 s6 `" ?2 d0 q* _  X/ I

  392. 8 J* |7 D- j. {8 i' S+ c
  393.   return JulianDateToGregorianCalendarDate(jd);
    9 S( C: F( [. t
  394. }! ]6 y& X! D# k5 v! \: D
  395. 6 t$ e3 A5 _( o3 Y- m
  396. /****************************************************************: {) I% w. t9 F" V$ u6 a
  397. * Function:    GpsWeekSecondToJulianDate
    0 b/ {$ k; h4 _' _, v
  398. * Description: Gps week and second to julian date.
    : \6 u: O) x' g. ?
  399. * Input:       time: Gps week and second.
    2 c4 k. g: Y6 P/ `5 t
  400. * Output:
    % u: U4 C: L( u3 v( j) f
  401. * Return:      Julian date., J$ a. x' n! V
  402. *****************************************************************/
    5 I6 ^9 v5 n9 C2 o7 M
  403. double GpsWeekSecondToJulianDate(GpsWeekSecond time)8 F/ n/ M9 ~  T2 K
  404. {
    4 X, g; d! j5 p3 W- N4 `
  405.   double jd = 2444244.5 + time.week * 7.0 + time.second / 86400.0;
    ' q/ G* F" V* W' _; e
  406. . a: N" {" Q# F6 e* y+ a: l
  407.   return jd;
    7 B+ C4 \3 y2 j+ k: z( N* I8 Z$ A
  408. }
    4 C; A4 e) |7 r6 N: {) t, z

  409. : H% R2 O. p! m5 M
  410. /****************************************************************4 P* `! e4 `8 I2 |0 y( u
  411. * Function:    GpsWeekSecondToModifiedJulianDate
    ' t! ^" C" f0 B$ i" B0 u( d
  412. * Description: Gps week and second to modified julian date.
    ' t# `" n7 n: Y& X
  413. * Input:       time: Gps week and second.  d, P5 b4 s" F( A5 ~
  414. * Output:
    ' U! D* g& X+ n7 Z) ?' n0 S* U
  415. * Return:      Modified julian date.
    2 Q1 ?6 t2 K; v) d
  416. *****************************************************************/( R) V% U- e1 w9 W* |
  417. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time)0 ^) g4 ^+ Q% B0 J7 _/ i
  418. {* A: K  z7 J5 ]" k2 k4 N& L
  419.   return GpsWeekSecondToJulianDate(time) - 2400000.5;
    : j) T, b2 v+ V4 ?
  420. }
    * x& w; }8 U2 s' S, w+ N3 E

  421. ( ], \! U+ P5 z$ V1 z6 }6 L
  422. /****************************************************************) u( [% C5 P' }) O# m. x$ X- Y! }* L
  423. * Function:    JulianDateAddYear& [  @# t9 x! V1 V
  424. * Description: Julian date add year.
    ; y) O3 [+ Q3 l4 O+ n* J
  425. * Input:       jd:   Julian date.
    3 }- O( ?, c; u" L7 |
  426. *              year: The number of year to add.8 D0 u' j& Y' o+ Z: {! m3 a
  427. * Output:
    % |7 k1 S3 i3 U. |7 ?8 }
  428. * Return:      Julian date.
    ! j' c# X6 B7 B& s9 \8 I% j& G
  429. *****************************************************************/6 W# A# T& ]* w4 f
  430. double JulianDateAddYear(double jd, int year)# K6 [  G% [0 z# P" M3 i) C
  431. {
    ( N7 D& o$ z( l6 e& s
  432.   DateTime date = JulianDateToGregorianCalendarDate(jd);
      S% c4 x. }: P( Y2 `: I; y6 T" E
  433. 9 l7 H) a# w8 R# z# R; k) i
  434.   date = GregorianCalendarDateAddYear(date, year);8 K, I7 B; c+ s$ v; [
  435. % `% C6 B" {  `
  436.   return GregorianCalendarDateToJulianDate(date);" _! W  z$ V+ Y, T
  437. }2 ^' _$ ]3 o; F& m5 @+ H7 a( H
  438. " D9 ]' k3 i: ?  |! T! x
  439. /****************************************************************
    4 l* J# J9 f$ z* }# I
  440. * Function:    JulianDateAddMonth
    4 k6 h0 X- u! T0 @9 E
  441. * Description: Julian date add month.# [; }& ^4 o$ V+ p
  442. * Input:       jd:    Julian date.
    / u8 c8 n  v& @; X& w+ x% G9 L
  443. *              month: The number of month to add." [9 x' \( K8 h  E8 c9 c& {  [
  444. * Output:
    % P0 S  ~& z7 E
  445. * Return:      Julian date.
    / u8 V4 `, c- F7 B6 g% ]
  446. *****************************************************************/
    ! w, w8 l. L' L" E
  447. double JulianDateAddMonth(double jd, int month)
    ) V7 A& J' M4 E1 m
  448. {& L" e6 z/ Q( ^6 s/ C# O; N
  449.   DateTime date = JulianDateToGregorianCalendarDate(jd);: v! n$ d, R3 N( N
  450. 4 {) b8 `( v  ?3 {+ l
  451.   date = GregorianCalendarDateAddMonth(date, month);
    , W5 u* k% h! I. ^

  452. 5 q/ y4 t# J- L$ @9 R) S1 N
  453.   return GregorianCalendarDateToJulianDate(date);2 x( U/ H! S* y2 x
  454. }
    ' e! K1 U/ ]' G5 d; g

  455. : q9 U& H% P- i9 B$ Z
  456. /****************************************************************- O0 B5 t# U+ `3 X" h8 t# }
  457. * Function:    JulianDateAddWeek# E+ b* l/ W' Z$ `4 m
  458. * Description: Julian date add week.
    6 P9 R5 G" o& ?8 T' X  i, b. J/ R
  459. * Input:       jd:   Julian date.6 X2 x% B& D9 ~' D! X; \9 B5 u
  460. *              week: The number of week to add.
    2 H3 @6 o! T; k
  461. * Output:
      ]' f$ q3 t) C$ `! W- \
  462. * Return:      Julian date.) u8 |; o5 h( ?6 o/ g  [/ q: ~% n
  463. *****************************************************************/, y) N4 C5 a, R3 A
  464. double JulianDateAddWeek(double jd, int week)
    ! C4 n1 a. _1 \" y  L
  465. {$ T- r3 w- P# U/ J* a% |1 }" A
  466.   jd += week * 7.0;* Z; v1 d# Z& c) }

  467. 2 N- Y0 b* t; z  a" F+ J; @% D
  468.   return jd;
    6 H. a  X! u1 }1 p8 d
  469. }! B0 D7 @4 n3 J( ~$ \
  470. % l2 c/ f" D( I
  471. /****************************************************************( V' N2 E: S" ^5 s! Q
  472. * Function:    JulianDateAddDay
    - k: ^9 r# h1 y! w5 f8 X: K& }- c8 K
  473. * Description: Julian date add day.
    . `9 f+ r6 {( ]- u2 e, U4 |- k2 ~
  474. * Input:       jd:  Julian date.4 s  i- T  \3 L' `* [4 H% f( |( L! F
  475. *              day: The number of day to add.
    7 H6 o) R0 C% I5 v( b" D" E
  476. * Output:
    $ U$ C& K" t" ~3 j# \* w
  477. * Return:      Julian date.
    " p0 ~; B9 [* s; ~# k" c
  478. *****************************************************************/
    8 O' ^7 m* l) z+ z5 t" r1 ]* w
  479. double JulianDateAddDay(double jd, int day); ~6 r. [  v3 l
  480. {/ `: b/ D5 q7 }! C( Z2 f5 v- P
  481.   jd += day;
    " C8 o5 F: H: F) J3 A

  482. 5 u3 E. @) j2 v
  483.   return jd;+ ?& x* T( h" m$ S. o
  484. }8 a! ?$ g* h5 H8 I3 O. Y  i
  485. ( i# U  [+ q9 x3 Z" G5 E$ s
  486. /****************************************************************6 U/ B4 X6 I6 S5 y" A
  487. * Function:    JulianDateAddHour
    ! Y( q/ p4 i$ L. d
  488. * Description: Julian date add hour.
    ' ]- f9 `0 m& p! k
  489. * Input:       jd:   Julian date.& q7 w& ^3 L* h  }  U
  490. *              hour: The number of hour to add.
    ; w7 T7 K' X0 g7 t" p
  491. * Output:* f* }1 |- C. D/ N3 v( D
  492. * Return:      Julian date.: l* P* }6 ^2 Z7 v4 U4 t
  493. *****************************************************************/; F6 v8 v$ |5 m: i
  494. double JulianDateAddHour(double jd, int hour)+ F9 R1 M* |0 e" @5 W+ c" n& @
  495. {
    4 |. W1 w) z; A5 H7 f
  496.   jd += hour / 24.0;
    . V' F9 _4 \" ~5 `; @

  497. . ]4 C- \1 e+ Z9 W$ R# M6 Z( ~" i
  498.   return jd;
    " m2 _* X6 ]$ u. R" O
  499. }4 t, Z3 D8 h( n6 }: ]& \7 m/ @

  500. " ~& F1 S# A9 ?7 X
  501. /****************************************************************
    1 C7 C. {( d) }6 W% @% |# s
  502. * Function:    JulianDateAddMinute( s8 e, H- U+ Z6 J1 y% {- C
  503. * Description: Julian date add minute.
    $ _; ?8 x* J% R! c& h9 t( O
  504. * Input:       jd:     Julian date.6 d6 K* Y, p! n+ t  h, d% a7 O
  505. *              minute: The number of minute to add.6 [, X8 r" e. J; ]$ M, I* ~8 W5 }& \
  506. * Output:
    : b! Y) m% f/ s0 N3 Y
  507. * Return:      Julian date.# D( e1 r% u# F: o# R
  508. *****************************************************************/4 r/ A" R" o7 A, X1 Q
  509. double JulianDateAddMinute(double jd, int minute)1 h* [9 l, V+ @. {' C
  510. {
    & ^" Y" @. {" B) S
  511.   jd += minute / 1440.0;' G2 g; I, r7 Y. Z, s! C& _9 B

  512. $ V9 \8 {0 @# S  k1 F$ K2 @
  513.   return jd;
    & l% N2 N1 Q% W0 M# V2 |6 Z. _
  514. }; x0 L+ L% c2 i" W# J6 r) J
  515. - Y7 ]: o; V5 t' j5 M
  516. /****************************************************************
    3 X( t$ P( {+ t8 s' i8 G
  517. * Function:    JulianDateAddSecond
    1 a4 O' A+ C) D9 ~! r+ P; \
  518. * Description: Julian date add second.* e* K% w/ U( Y! I* Y5 Z0 b! l4 u
  519. * Input:       jd:     Julian date.- w7 g7 m0 e4 e8 t& a; Q8 c
  520. *              second: The number of second to add.
    % j5 p+ ?: }- o& i6 F% k+ `3 E
  521. * Output:
    ( J+ x+ ^3 t) g1 }: J% \
  522. * Return:      Julian date.: w/ n, `0 I" r7 l# v' z% b
  523. *****************************************************************/+ B" P! E) R* y7 p1 h0 H& j
  524. double JulianDateAddSecond(double jd, int second)
    - n# V- g. P, B
  525. {
    9 Q3 I1 O5 J$ U: n1 G! t* \, n# y$ x
  526.   jd += second / 86400.0;
    $ k2 N7 f% r1 y/ l1 v
  527. 2 e' d8 c; P' ?! L
  528.   return jd;
    # q8 i$ p9 z) |) ?; e
  529. }9 I7 s7 K, b+ F

  530. 7 R/ f- _5 i$ ~% d" i" \6 m1 K
  531. /****************************************************************
    5 @; u* R# X+ e7 |
  532. * Function:    JulianDateToGregorianCalendarDate
    ; M3 j4 p5 p* ?% G
  533. * Description: Julian date to gregorian calendar date.
    ! F! B/ ^. I8 A6 B2 `2 |+ H
  534. * Input:       jd: Julian date.9 p+ \/ C0 E; z5 Z5 Y
  535. * Output:
    $ z9 C$ T- }) N$ ^* [0 [8 l& o
  536. * Return:      Gregorian calendar date.$ }2 |" _- O3 T$ A4 j! ]! @6 _
  537. *****************************************************************/1 F( {' L0 H9 \/ a3 b) N
  538. DateTime JulianDateToGregorianCalendarDate(double jd)
    & O6 j# c- X# Y/ I
  539. {  j. K" X4 J7 {
  540.   int y = 4716;( H" E" c3 N" h; Y2 u( I# f
  541.   int j = 1401;2 Q9 a5 v: ]) _2 \" R- H4 @$ k( s
  542.   int m = 2;
    3 d6 G9 e- X6 E: X% T
  543.   int n = 12;
    2 k! H3 S- r6 p8 S7 r1 y# ]
  544.   int r = 4;+ E) e, q' X7 U& k  Y0 f$ X
  545.   int p = 1461;
    ; }! i: ^$ ?4 Q4 q, b
  546.   int v = 3;- n, X( u/ Z2 G. ~- K* f; G
  547.   int u = 5;" M2 M2 T( w9 G1 O( b+ W6 u; ^. v
  548.   int s = 153;
    $ S1 |5 ^3 Q/ i$ \6 `2 z
  549.   int w = 2;
    4 ?$ h9 R  D3 q7 @( z! D7 K
  550.   int b = 274277;
    , [0 i) Y. A0 K
  551.   int c = -38;
    ' B) P5 r  Y% c& e0 x

  552. 1 c: k" X% R# X$ A- i9 ^
  553.   int jdn = (int)(jd + 0.5);/ J% U0 G- v4 ?' z) E3 e+ f
  554.   int f   = jdn + j + (((4 * jdn + b) / 146097) * 3) / 4 + c;
    7 ?, y& F" L6 y2 _2 |5 ~+ p" X
  555.   int e   = r * f + v;$ L. D" s9 |8 \, F
  556.   int g   = (e % p) / r;9 o6 P3 X% G' f8 {3 K7 N
  557.   int h   = u * g + w;
    8 |7 E1 p! a" U$ b2 a9 G$ N( I

  558. ! @. o: C6 R) c% d
  559.   DateTime time = {0};
    3 N( f  @7 i+ F3 e7 ~

  560. , e$ C: r! K' F" q& A. h* ]
  561.   time.day    = (h % s) / u + 1;. N* q- {% n; a
  562.   time.month  = (h / s + m) % n + 1;
    % x5 K9 O1 y( z6 ?1 r. U, U
  563.   time.year   = e / p - y + (n + m - time.month) / n;" O8 E! B4 S) ~  m4 x, j4 \
  564.   time.hour   = (int)((jd + 0.5 - jdn) * 86400.5) / 3600;
    9 U* U) ^- I9 z
  565.   time.minute = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600) / 60;+ A1 r4 `) F5 ^+ B* P! S
  566.   time.second = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600 - time.minute * 60);
    7 P& @# F: G7 }: Y

  567. & o+ U# l& ]" u  L, R' a
  568.   return time;
    , @4 h6 r; P  E
  569. }+ _/ S! {7 ]( A

  570. + I4 W2 e* W1 v- i' I
  571. /****************************************************************9 E$ `. G' y7 x% d
  572. * Function:    JulianDateToGpsWeekSecond1 h$ K' ~0 g7 F
  573. * Description: Julian date to gps week and second.
    8 R, x8 |. ~  u  X
  574. * Input:       jd: Julian date.
    * r! R* W, [/ K7 V
  575. * Output:
    , w; Q5 U0 y9 H' }. u$ A
  576. * Return:      Gps week and second.
    1 u$ g% f4 W1 {$ T2 G
  577. *****************************************************************/
    4 b# t6 X8 f5 K! E
  578. GpsWeekSecond JulianDateToGpsWeekSecond(double jd)
    / ^: k# f2 ~$ K4 `4 m) I4 ?
  579. {
    + ~; w: ^: D* r4 u/ S9 N
  580.   GpsWeekSecond time = {0};7 G) R0 a5 A; w7 B& D
  581.   DateTime      date = JulianDateToGregorianCalendarDate(jd);  L/ K7 v( `, I  Z
  582. 1 W3 W/ w( J) ~4 j, \; {
  583.   time.week   = (int)(jd - 2444244.5) / 7;5 ~) {2 t1 J/ F: c
  584.   time.second = ((int)(jd - 2444244.5) - time.week * 7) * 86400 + date.hour * 3600 + date.minute * 60 + date.second;
    7 y- A1 L2 S: y* o$ Z, h+ |

  585. 9 }( m# O$ g1 i2 Q; L2 k2 P2 |
  586.   return time;
    + q. t2 s0 M' h* S8 O6 l4 P( @
  587. }
    8 E1 }; T! F( o$ {$ r' b
  588. ) O0 @5 i! B0 l" v0 `
  589. /****************************************************************
    2 i2 d! a* [7 g* Q4 X1 [" a4 S; X
  590. * Function:    JulianDateToModifiedJulianDate6 x2 n; Q; z! c7 V* \; v
  591. * Description: Julian date to modified julian date.
    % L- F0 v' S- W5 Z7 N( a" r
  592. * Input:       jd: Julian date.
    : K: o- F7 x* R, w5 @- J, Q1 X
  593. * Output:9 ?, x9 Y$ S) \" b
  594. * Return:      Modified julian date.; @' \# l: h# n3 v  b
  595. *****************************************************************/1 n" |2 L1 R1 m, s
  596. double JulianDateToModifiedJulianDate(double jd)
    " a+ b2 I& ]$ m6 Z! G
  597. {" c. I( s5 \3 m4 A- d; B
  598.   double mjd = jd - 2400000.5;, T: B6 X! f, q
  599. , @" P8 k! G8 J4 v3 [
  600.   return mjd;* x. r# u) r5 [- |1 I7 e9 I
  601. }& t0 W0 w0 T8 z) w; p" d

  602. / J- q! G& ~0 G4 L5 c  @9 i0 E
  603. /****************************************************************
    6 b& }* h  \9 P7 H; T& v# y
  604. * Function:    ModifiedJulianDateAddYear- t, ~; s7 i* d
  605. * Description: Modified julian date add year.% _7 x6 K& T+ C' A+ i
  606. * Input:       mjd:  Modified julian date.
    0 n3 I0 x" P) S5 X$ w1 z% q
  607. *              year: The number of year to add.
    + n, J1 p( d/ [, @1 c
  608. * Output:
    ( m2 I% k' T/ g+ x  F
  609. * Return:      Modified julian date.0 K4 h) V' I: v6 h$ T+ U' a
  610. *****************************************************************/
    % k5 W0 x3 V( m, f  e$ B7 M
  611. double ModifiedJulianDateAddYear(double mjd, int year)! B8 f& @0 @: c) z( [$ [/ ^- @& d
  612. {4 D) ?2 j& x& O6 _% d
  613.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
    % A/ T9 {% V& S( {* X9 d: g3 T
  614. 8 ~7 `/ w, ~* H$ n
  615.   date = GregorianCalendarDateAddYear(date, year);! V, B2 @( {: _+ X" y' `; Z$ p

  616. 4 s5 `$ d, U* D. ?* L4 F
  617.   return GregorianCalendarDateToModifiedJulianDate(date);+ ?8 u  |  `  y- B1 u  N. y: u
  618. }8 W) x) G, B+ Z: p8 x% D

  619.   f4 c* ]6 C6 a- D! i
  620. /****************************************************************
    / B- W# K% W. h
  621. * Function:    ModifiedJulianDateAddMonth6 i3 ~6 M/ \( W% U* y: c: D
  622. * Description: Modified julian date add month.  b3 b% Z( @2 a% s
  623. * Input:       mjd:   Modified julian date.
    . R3 D, J9 Z$ ^" ^+ z- l& R
  624. *              month: The number of month to add.
    2 {+ [1 X3 f$ q' b
  625. * Output:, |( ?( [- C8 k% }2 \% [& L6 k3 S
  626. * Return:      Modified julian date.
    & q- G  \7 k3 k  ^- ?4 p0 O
  627. *****************************************************************/
    7 l, P2 J: i1 a: G  e
  628. double ModifiedJulianDateAddMonth(double mjd, int month)
    " ]; C0 u( J) }& j% E6 N% n7 M( [
  629. {& E9 P8 U+ w: U, Q; N* j
  630.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
    5 h% j6 \1 m+ q
  631. ' f+ z' F' m9 V2 C. q: ^: t
  632.   date = GregorianCalendarDateAddMonth(date, month);0 v6 h, y% |/ p% e3 w: t8 k9 I- f
  633. . l  y7 X( ~- B) d' Q
  634.   return GregorianCalendarDateToModifiedJulianDate(date);( O/ M4 U% J+ L" x
  635. }
    5 S! ^7 P# G0 L/ o1 ?# ^7 D
  636. 4 y! D0 Z" H  s
  637. /****************************************************************- B1 d5 A( v6 ^! I. Z
  638. * Function:    ModifiedJulianDateAddWeek4 r+ F) g0 C) d
  639. * Description: Modified julian date add week.
    1 D5 k7 J0 _  V3 k& w6 p0 [9 Q
  640. * Input:       mjd:  Modified julian date.
    ) D. D* x$ t3 W/ M
  641. *              week: The number of week to add.
    3 U7 t2 [- Y, N
  642. * Output:
    ( d: J& x% r, r
  643. * Return:      Modified julian date.
    # `, l7 D4 Z3 m* S0 l: Z% U' ]
  644. *****************************************************************/
    8 Y9 c! O' A. M: G
  645. double ModifiedJulianDateAddWeek(double mjd, int week)
    6 q4 O+ g1 U$ b3 Y) i: f; Z
  646. {
    ; ?* Y! u9 X( g% N
  647.   mjd += week * 7.0;
    ! O) Q! ?8 a" h; y

  648. ) N1 [  N  }* S/ n
  649.   return mjd;/ U* u9 C  k; s. O
  650. }
    " |9 y  R, o8 q+ E+ Y7 k

  651. ! k( D2 O  x# t) V& U8 E! W
  652. /****************************************************************
    + r, e  v- H6 M" r
  653. * Function:    ModifiedJulianDateAddDay
    * _" W5 C' M/ V; A7 C5 X/ n
  654. * Description: Modified julian date add day.
    - E/ z7 @, [1 B' a* M( ?. M* O! |
  655. * Input:       mjd: Modified julian date.
    ; y9 p4 R. @5 s' N8 c$ b+ p0 C& C8 @5 c
  656. *              day: The number of day to add.- Q1 y. ~9 }, A! F: g" [! ~
  657. * Output:: ~$ \7 d0 z2 q2 k
  658. * Return:      Modified julian date.
    # h- ?1 s1 p  l" T
  659. *****************************************************************/2 o" M' O# c, {. a) W
  660. double ModifiedJulianDateAddDay(double mjd, int day)
    ; z* {9 w+ c6 g  ?( @
  661. {4 S4 ], S( e9 Q' [3 K
  662.   mjd += day;' S$ q, J  _5 ?, [( r% D: c
  663. 9 @9 O& K% {- D4 e7 s% S: n
  664.   return mjd;  X8 B5 N5 T9 x0 n
  665. }
    , y7 V2 L4 o& o+ ]+ r

  666. # ]2 z" v' T, u- |  d. k
  667. /****************************************************************
    3 M9 n3 x3 O: [0 z3 t
  668. * Function:    ModifiedJulianDateAddHour
    $ y' r$ b; {: K  @  O6 e
  669. * Description: Modified julian date add hour.
    & v8 j4 K1 h) t  ]6 i# _
  670. * Input:       mjd:  Modified julian date.
    % `4 [. i# P' F% U0 M" ?+ H
  671. *              hour: The number of hour to add.
    1 l" B7 W$ ~) b- A6 h
  672. * Output:
    , v# Y( @( `* v! Z. C
  673. * Return:      Modified julian date.+ C! A* E8 d" S& \
  674. *****************************************************************/7 @, e1 \: b5 X! x" @8 P* S
  675. double ModifiedJulianDateAddHour(double mjd, int hour)
    / a7 z0 _+ I5 ]+ K" n  n
  676. {
    # S  v; {" Y# f* G
  677.   mjd += hour / 24.0;
    3 }6 O8 a6 U6 h9 k  u! w& b% d7 h

  678. * x$ r% i) \4 t" n% ~" p( M' l0 A
  679.   return mjd;
    + X: Z/ d% Q$ L1 Z: _' [# _& b
  680. }
    0 Z* Y- z8 F- c2 T4 o
  681. % B* a. ~. E" P% d8 L
  682. /****************************************************************
    " I, |. {2 Z- G) }3 m1 S
  683. * Function:    ModifiedJulianDateAddMinute
    # i+ w# `3 X# |6 _8 V6 q  ]
  684. * Description: Modified julian date add minute.* ^1 M( b6 p0 O
  685. * Input:       mjd:    Modified julian date.  S4 v1 G, \; }! ?4 i4 [
  686. *              minute: The number of minute to add.
    / a3 S( G4 ]0 e9 g  s( U2 S; P& \
  687. * Output:( `5 e$ g2 m: D) ~4 Y
  688. * Return:      Modified julian date.
    * K3 X+ a3 T7 {- p) o- w" g: P# {2 X
  689. *****************************************************************/, q3 e% ~7 F0 I5 M* l
  690. double ModifiedJulianDateAddMinute(double mjd, int minute)- \5 V/ K6 a0 [: K# l# v; |$ C
  691. {
    ' u$ l5 _/ o' v# s; L
  692.   mjd += minute / 1440.0;
    ' S: @' l! a0 ]% `, g8 s0 J

  693. 4 _3 D. r" ^4 i$ y; y
  694.   return mjd;  S% G' u- L; `% M
  695. }6 G  K% `  N8 _" K
  696. & |6 |* M9 h7 l; {$ l$ V2 i
  697. /****************************************************************/ f  I2 @3 [' t* t1 Y( A9 f
  698. * Function:    ModifiedJulianDateAddSecond
    $ m/ W5 p$ D7 h9 b
  699. * Description: Modified julian date add second.
    % \) D' y9 z+ H' \$ s" }
  700. * Input:       mjd:    Modified julian date.5 k! _3 K( J. n4 {% s1 r7 Y: m2 @$ z
  701. *              second: The number of second to add.2 b3 S$ `; G9 D, D! ?; k
  702. * Output:8 O' O, J/ f1 v
  703. * Return:      Modified julian date.: c8 C4 m  ~" m$ i; H9 [
  704. *****************************************************************/
    , r  T' W, G/ Q' n% v3 m$ y
  705. double ModifiedJulianDateAddSecond(double mjd, int second)3 f) T) @5 e' E; a
  706. {5 ]' t2 t5 e$ @+ V( }
  707.   mjd += second / 86400.0;: g8 r) F6 G6 ^& s/ ?: C3 a* n

  708. / S* z+ i9 G$ F# K6 F
  709.   return mjd;
    ' m& b2 ~3 s6 R+ ~
  710. }* M  \. y' H" w- B

  711. 6 u) ~$ s" D; }
  712. /****************************************************************5 E4 ?$ Q3 W' Y: m: W" e" j, w: |
  713. * Function:    ModifiedJulianDateToGregorianCalendarDate
    ; M$ S# Y' O2 L& P8 |
  714. * Description: Modified julian date to gregorian calendar date.* L# b1 m6 h' S
  715. * Input:       mjd: Modified julian date.
    0 K9 T2 f$ T; c1 D. S
  716. * Output:/ Y! ]' u0 B7 S0 O
  717. * Return:      Gregorian calendar date.+ `, B. }% o0 k
  718. *****************************************************************/" E8 {) [7 Q/ g! G$ u" \( r
  719. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd)) a) o5 @* \& u: s) P
  720. {/ Z* w1 f+ x4 t0 x1 ?
  721.   return JulianDateToGregorianCalendarDate(mjd + 2400000.5);
    - M, i1 s  J6 s- l7 f
  722. }
    ! W4 z- i6 _) \+ n* Y
  723. 2 T4 R& G# ]! H  Z/ n( o4 a; `: ?
  724. /****************************************************************
    : P7 `4 s( J4 a, t: u# |
  725. * Function:    ModifiedJulianDateToGpsWeekSecond
    0 F; Z+ e# ?1 N8 G; P( a3 ?
  726. * Description: Modified julian date to gps week and second.
    8 R6 ^: M) O8 n6 I% {
  727. * Input:       mjd: Modified julian date.
    2 N  x) i* V3 L: l1 M  _, Y" R
  728. * Output:
      l% o, h3 C3 r' R+ e5 y; b+ G
  729. * Return:      Gps week and second.
    / f1 B5 l& ^2 x4 e# z
  730. *****************************************************************/5 f. ^! P1 J6 t0 D. V
  731. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd), o6 e- c! o% O2 ?
  732. {
    & z0 }4 Y5 ^& Q5 a( Z
  733.   return JulianDateToGpsWeekSecond(mjd + 2400000.5);
    1 ]7 B0 K! Q' j8 {- c
  734. }
    3 |1 P8 s  |- a3 @$ E
  735. , A4 R: c; }. o0 M, ^
  736. /****************************************************************
    % H. }! U& Q) a- [3 t
  737. * Function:    ModifiedJulianDateToJulianDate
    * k4 j8 A: y9 y& U, B/ k
  738. * Description: Modified julian date to julian date.) s0 ^+ N) N5 |- H* L
  739. * Input:       mjd: Modified julian date.
    3 f1 A& T- h1 j7 r& s& U
  740. * Output:! ~+ E1 G. ]- T8 N# f% V6 q
  741. * Return:      Julian date.8 r; H0 r) }. ]: |' }
  742. *****************************************************************/9 k$ |7 w% A- I0 R4 a
  743. double ModifiedJulianDateToJulianDate(double mjd)
    ) D( R; O6 N! Z. m4 W
  744. {
    5 z! o$ k7 u  t' p9 [8 V/ n
  745.   double jd = mjd + 2400000.5;9 F, Z1 }/ k3 j2 Q1 F) z% j1 H$ V
  746. ! w# q6 q: k3 j9 |7 i8 g6 ~
  747.   return jd;
    9 }; _" \% L; N0 k; e
  748. }; M! U3 ?" d" r9 ?
复制代码

3 y) z5 ]. k! f/ l: |      main.c文件+ r. T$ s0 Z1 K4 d" l
  1. /****************************************************************
    7 a& f- K2 ?( c% D
  2. * Copyright (C) 2017, XinLi, all right reserved.
    6 v& Y# p' _/ n! z3 d3 r
  3. * File name:    main.c
    7 p* w4 S2 M& M* f8 w5 X) J
  4. * Date:         2017.10.175 z& @  P5 \; H' l: U* `% z: `
  5. * Description:  GPS, UTC and local time displays." L7 [0 p9 P! Y; g' X+ e
  6. *****************************************************************/$ p, B: W( D- {- u$ V! L/ [; S5 D
  7. # Q: s+ L5 d. m+ j' q. l% ^% i
  8. /****************************************************************
    ) b7 d6 N6 Y# p% V- w/ Z
  9. *                        Header include& G; l+ b, J$ u, b" _
  10. *****************************************************************/
    + D& f# e4 j. s6 Y) s
  11. #include "DateTime.h"
    / a- M  w( }& I2 e9 X
  12. #include <stdint.h>3 d/ g4 i6 _( g, X5 v
  13. #include <stdio.h>
      U* z  e6 {( W" b; A. `4 Y- ?5 o
  14. #include <time.h>& Z4 \6 K2 F) A& C7 u
  15. #include <windows.h>
    5 l7 N! [/ l( L6 n* V) n" v- v8 {9 r
  16. 4 ?  }7 @( j+ ]: P
  17. /****************************************************************
    9 j5 R) \5 Q& e$ W! D
  18. *                       Global variables
    * s6 C2 [+ S* m4 G2 C( x
  19. *****************************************************************/
    % J- ?3 M; ~9 }3 Y# T
  20. 7 H* u! J9 j6 I4 u" y" o3 @4 ]% @

  21. : D$ m' ~: E1 T7 o6 n
  22. /****************************************************************
    ' k' R6 R, \: a
  23. *                     Function declaration) U* Z5 a! R. h+ W
  24. *****************************************************************/
    $ u$ x" V) b* e" F3 f4 ?, Q
  25. static void gotoxy(int x, int y);% B& ]4 A( n% p; C, X. H

  26. 8 U4 d8 T, e+ Z* ~
  27. /****************************************************************0 L) K" Y# ~& M$ j2 ?( s
  28. *                     Function definition
    3 @% ?, L" B  ^3 Q# p! v
  29. *****************************************************************/
    0 A8 V1 h$ U% r0 ~# x" x+ G3 a

  30. / b, A! X$ B4 h2 C
  31. /****************************************************************
    * r" x6 L+ a0 _9 ^5 n) o  d
  32. * Function:    main) k, q5 \4 n- T: c( D9 D
  33. * Description: Program entry.; ?- P, z7 o' T! q+ n
  34. * Input:% M# P. V+ V2 A! C  P0 W' U' e) L
  35. * Output:0 T. |- C0 K# i( N- ?: q
  36. * Return:
    + M, N3 T% R" I7 _  s! D' |+ b+ }
  37. *****************************************************************/
    8 H9 y6 @7 U+ g" E
  38. int main(void)
    2 `- z" K/ H' z2 Y0 Z
  39. {# L6 G' w: h1 }0 |; I
  40.   for(;;)
    6 A  ~9 v# h( _
  41.   {
    ; f1 w1 v( a" F
  42.     time_t        times     = 0;
    1 B7 R8 [$ r2 D' b6 F: x6 F
  43.     double        mjd       = 0.0;
    6 ?# y! G' W) I; a
  44.     DateTime      utctime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};
    % e, d5 T7 V' }" H. X
  45.     DateTime      localtime = {.year = 1970, .month = 1, .day = 1, .hour = 8, .minute = 0, .second = 0};
      [) `: i0 n  k- F4 v/ e
  46.     DateTime      gpstime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};: I, X5 C5 u! v* h
  47.     GpsWeekSecond gpstimews = {0};: S, \1 L+ [9 @/ Y* s9 [, X

  48. ( u7 N! ?3 o0 m
  49.     time(×);$ a( f  f" F. U2 `2 L

  50. ! ~* H8 g' l( J8 v$ j
  51.     if(times > INT32_MAX)
    5 O) A& F$ e4 y  f0 d7 R) ]2 b
  52.     {
    8 C9 J2 }. T& R$ U- Z  J7 S- Z) C5 \
  53.       utctime = GregorianCalendarDateAddSecond(utctime, INT32_MAX);
    : U' c% \6 q! {6 z/ w& }0 A
  54.       utctime = GregorianCalendarDateAddSecond(utctime, (int)(times - INT32_MAX));' v/ q- x. f- h3 h
  55.     }4 A; u1 l& v+ F' a( c* |# @
  56.     else
    9 z6 `+ q3 y6 d4 y& r
  57.     {3 x* o6 N3 q* ?2 K" Q  `
  58.       utctime = GregorianCalendarDateAddSecond(utctime, (int)times);
    ' l$ k/ W1 ]/ H6 G9 f6 _
  59.     }1 i9 W6 r  e1 x! g

  60. 4 n3 {& u( o5 L. ?, A
  61.     mjd       = GregorianCalendarDateToModifiedJulianDate(utctime);# s$ @4 p8 @% ?9 `( y
  62.     localtime = GregorianCalendarDateAddHour(utctime, 8);9 B1 s" M; Q/ B' ~
  63.     gpstime   = GregorianCalendarDateAddSecond(utctime, 18);
    9 v1 u5 O" l4 h8 _
  64.     gpstimews = GregorianCalendarDateToGpsWeekSecond(gpstime);
    9 g% u7 S" d- J% G" X9 ~

  65. 9 [" z$ R' E4 h+ D$ o/ R7 j
  66.     gotoxy(0, 0);
    . x" e5 I- v7 p8 [* |4 w! r

  67. 0 l1 Y4 {$ i+ B1 q4 \& T# a9 |
  68.     printf("Local | %d-%.2d-%.2d %.2d:%.2d:%.2d | timezone UTC+8\n",
    1 b+ n( l8 H: _) P
  69.            localtime.year, localtime.month, localtime.day,  l5 U$ Q  `9 R5 n) T
  70.            localtime.hour, localtime.minute, localtime.second);3 ^# D3 [9 L+ J. s/ _

  71. 8 J8 Y' g% M, R: h8 D5 b) {
  72.     printf("UTC   | %d-%.2d-%.2d %.2d:%.2d:%.2d | MJD %.5f\n",3 c# t9 o% s7 x- d) B
  73.            utctime.year, utctime.month, utctime.day,5 x/ |/ r2 z; {9 W% f
  74.            utctime.hour, utctime.minute, utctime.second,) \% X) j# Y1 x0 C2 M) l
  75.            mjd);
    0 |( ?% x% {6 J6 C- [6 K8 M3 |* e

  76. % W/ V4 V3 c' X5 i* u
  77.     printf("GPS   | %d-%.2d-%.2d %.2d:%.2d:%.2d | week %d %d s\n",; c; D* F  a  A% _+ G) }  o. i
  78.            gpstime.year, gpstime.month, gpstime.day,* s+ P: N3 i# c
  79.            gpstime.hour, gpstime.minute, gpstime.second,
    3 C) A- l% y9 F
  80.            gpstimews.week, gpstimews.second);/ e0 s& h+ l" `9 u, S  [+ I
  81. * q! D) j, r  B) d; R0 O
  82.     Sleep(100);
    & \# J9 z3 P- d5 Z! y2 ?) B
  83.   }: H" f5 a! e+ Q% x- {  M. w
  84. }$ U9 t1 Q6 x' |- a

  85. 2 d- j. j1 |6 e. L
  86. /****************************************************************
    6 J6 k+ {; i  G' o! T
  87. * Function:    gotoxy' T: {3 v; A: Z' H8 B; ^# v$ @
  88. * Description: Move the cursor to the specified position on the text screen.
    ( Y. P; b) v% O. I& E' O
  89. * Input:       x: X axis coordinates.2 l8 l! R; o  A4 v
  90. *              y: Y axis coordinates.
    # ?3 ^5 e  }# K# z. t9 w& Z+ `& G
  91. * Output:- ?! X# O0 Q) Z" S+ [  u5 b
  92. * Return:5 n- [2 K) G' b# L1 |6 C  o
  93. *****************************************************************/5 f6 d5 q5 }# A4 U9 l
  94. static void gotoxy(int x, int y)
    5 p6 u! r2 w) e  Z. t$ X; U7 c
  95. {* w) v% k7 \* L$ _
  96.   COORD  pos  = {x, y};8 j$ t0 Y/ r3 k; y1 {
  97.   HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    ( U2 W1 o3 w$ m) {$ S! K
  98.   SetConsoleCursorPosition(hOut, pos);. k+ n6 B7 y; {
  99. }
    9 E% M5 W9 x% A* a0 n, T
复制代码

% P% h( z4 q9 _4 U" P/ u3,运行效果1 r% V' H- H& Y- z" ~- D
RunningResult.jpg
7 M/ b9 D3 W+ i8 w* G1 K

9 Y$ A, L* k6 U
收藏 评论2 发布时间:2018-2-2 21:41

举报

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

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版