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

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

[复制链接]
XinLiYF 发布时间:2018-2-2 21:41
GPS,UTC和本地时间的显示器
. Z" N# Y  z. |# @5 ]
  N  |% Q/ Z) u7 c0 T7 b, M
转载来源:GPS,UTC和本地时间的显示器# j% N$ x* x  S) e& R

5 _, ?; G* U6 V: K, QGitHub仓库:http://github.com/XinLiGitHub/GpsUtcAndLocalTime% F0 m4 M8 N3 ]9 p2 }8 ~
PS:博文不再更新,后续更新会在GitHub仓库进行。
3 B4 N4 H1 V# Z' J$ n$ t
. s% V6 Z/ I4 w/ p  Z      GPS,UTC和本地时间的显示器。程序中涉及到朱利安日期的转换,详细介绍见维基百科[Julian day](http://en.wikipedia.org/wiki/Julian_day)。( g: ?2 X/ q3 n* [: s) b! w
5 ?. {  j# R; h6 ]' A' n1 g
1,开发环境5 s7 _$ h* {5 |) T
      1,操作系统:Windows 10 专业版& I& \+ n3 P5 `
      2,IDE:Visual Studio 2015 专业版
% a& G1 p. U, }5 {+ Y  {8 n
8 X# d8 ?* l! y! j+ H0 I0 M2,程序源码, q6 p, A9 J# ^
      DateTime.h文件
! ~0 H; ?; ^" U+ z/ f! T
. O1 U5 n2 ^3 ?0 J' \
  1. /****************************************************************
    ; P: q2 q  H' j! G' x& N6 v7 u
  2. * Copyright (C) 2017, XinLi, all right reserved.7 J& G/ g6 h/ w! J
  3. * File name:    DateTime.h
    " d) K* S8 O2 m5 k4 z1 S
  4. * Date:         2017.10.17
    8 Y8 k! w. R" F7 r, F, W) y
  5. * Description:  Date and time module header file.) H8 z7 j2 C, u. O" D  [$ G  n6 m4 f7 ^
  6. *****************************************************************/
    : @. p, G8 g* W( w* Z" T% E% [

  7. ; D. b) b% f; ]5 o) x. U
  8. #ifndef __DATETIME_H
      `4 ^6 ^  n5 L8 J
  9. #define __DATETIME_H8 k( k- s) a2 ~9 B3 \' a- x

  10. * V0 i, U5 w4 a( N; K; ]
  11. /****************************************************************# u  {+ @7 r& [
  12. *                        Header include
    4 g0 w* @' E( N6 }5 A/ a
  13. *****************************************************************/7 s3 y1 T+ `. e

  14. , }- L; F3 R' ]; A' v$ H8 {8 z

  15. , U" r4 }2 T3 C5 a
  16. /****************************************************************2 W+ W" s$ ?: E/ L. q, |4 U$ V+ A! E
  17. *                       Macro definition2 F" Q6 C0 X3 |; U, u! `1 b. y1 ~
  18. *****************************************************************/
    1 J; C2 O" ^; i. l0 g

  19. + h% C5 f4 y$ h* o8 }* Z- Y

  20. / {+ ]9 @9 D9 t, p
  21. /****************************************************************
    : y: a# Y7 @: P1 k
  22. *                       Type definition; S2 S( R6 X; M" h  E8 C9 J
  23. *****************************************************************/) s2 Q! L) A2 C6 j

  24. 7 s& U5 r- M4 J0 j8 ]
  25. : K8 ^5 _7 F+ O1 K( p
  26. /****************************************************************
    6 Y( ?$ s# ~5 J! S% R& b& V
  27. *                     Structure definition7 w* _) v; J* N7 t$ m
  28. *****************************************************************/
    2 A7 o. l" @" o  K- t/ G$ Y
  29. typedef struct
    . }$ Y6 Y# W6 R$ h- g
  30. {
    , O$ n* D% ]. O- Y7 N7 [
  31.   int year;
    ! X* c. g8 \% I# |
  32.   int month;& [( t; A- M# C6 r3 i; p! Y8 K
  33.   int day;9 w* V/ {. }% C, K
  34.   int hour;
    : A0 L+ C1 s: d2 d1 R+ A) J' {
  35.   int minute;
    ' u2 s0 v& t+ M7 X+ Y3 Q
  36.   int second;
    8 p. \. Y7 I  x8 C
  37. }DateTime;
    ( {, X9 S! v% m

  38. + L5 \8 q( x- X. P0 C" Q
  39. typedef struct
    * S; ]  @. r  b: ?! R- i5 W
  40. {
    % F1 {1 ~& g# ?5 N
  41.   int week;
    0 W  y7 ]: i2 W8 Q3 f* _
  42.   int second;
    9 r" S: Y: C9 S- E
  43. }GpsWeekSecond;- e" ]1 L: M3 v. U9 ^0 s* f0 ^7 W( r

  44. 6 P3 l, c: ]2 n. E: {- u

  45. 7 E6 d! p9 `) K- a! B0 e# u% e
  46. #ifdef __cplusplus' L: l* }8 |* r4 i, Q
  47. extern "C" {
    6 [6 W3 \3 |5 U5 m* ^
  48. #endif  /* __cplusplus */
    , E/ {  i. x( L: N  J5 @+ y( z7 p
  49. . R8 e' A8 z6 @
  50. /****************************************************************! k2 j0 r' S6 r) w& @: _
  51. *                     Variable declaration% I# \# r2 q% h  n# M
  52. *****************************************************************/4 K3 ?: s- {8 k# R1 R
  53. 9 M" e2 R4 r# f. A* e9 j
  54. ( o3 w0 v5 h4 L7 E- B+ x, k2 u
  55. /****************************************************************
    : N; f1 v* k  u: W" z$ B
  56. *                     Function declaration5 n; U$ Y& }- j8 Q% `
  57. *****************************************************************/
    % k. o$ _) q( t  i0 u
  58. DateTime GregorianCalendarDateAddYear(DateTime time, int year);
    ! l2 c" a- B2 @  J2 i9 A; s
  59. DateTime GregorianCalendarDateAddMonth(DateTime time, int month);6 A. Y& [$ T" [7 m# [. U" \9 t
  60. DateTime GregorianCalendarDateAddWeek(DateTime time, int week);$ [9 w- e/ ?" Q, j3 w+ d
  61. DateTime GregorianCalendarDateAddDay(DateTime time, int day);
    / }' S4 `2 \8 m! O) o9 Z; F: Z& Z
  62. DateTime GregorianCalendarDateAddHour(DateTime time, int hour);
    6 h- f; \/ y4 y5 h# D8 P& ]: T
  63. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute);
    5 d0 O% Y1 h( v  y
  64. DateTime GregorianCalendarDateAddSecond(DateTime time, int second);* y! M9 f3 r6 J
  65. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time);# d: ^4 M, Q# N$ Z1 @1 h5 n
  66. double GregorianCalendarDateToJulianDate(DateTime time);. P4 y: f& r' Z, K
  67. double GregorianCalendarDateToModifiedJulianDate(DateTime time);
    " l# [/ r7 _. U
  68. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year);3 Y& z- D, c* ^9 T
  69. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month);
    , u/ K! i6 L- K
  70. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week);5 D1 R9 ?: N6 m5 x3 y
  71. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day);, W: {: j, S* D9 d
  72. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour);
    / H' o: R5 y5 a* D) `- S
  73. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute);
    4 E* r& f7 I5 @2 K! [
  74. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second);. {1 X  c- o6 y" r2 U" V# z, Y4 a1 s1 E
  75. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time);
    $ ^! f# T5 v  j, F+ h* T
  76. double GpsWeekSecondToJulianDate(GpsWeekSecond time);" n2 D' o, c6 V- K* \
  77. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time);
    * K0 W% o! u8 O' B0 j9 q+ Y) Y$ f
  78. double JulianDateAddYear(double jd, int year);9 A9 K8 ^) t: @1 ]5 f' m
  79. double JulianDateAddMonth(double jd, int month);/ W4 L3 U5 N+ V5 e8 ^$ F) x
  80. double JulianDateAddWeek(double jd, int week);
    : m) J+ h# u5 D
  81. double JulianDateAddDay(double jd, int day);. T! u  q9 l$ O6 @1 o
  82. double JulianDateAddHour(double jd, int hour);
    % d. y7 X0 H0 |+ z. z# y$ P
  83. double JulianDateAddMinute(double jd, int minute);" g( y, C  u* x: @6 \
  84. double JulianDateAddSecond(double jd, int second);
    $ J+ z4 U" S. [2 m& N5 M- T8 {
  85. DateTime JulianDateToGregorianCalendarDate(double jd);
    4 w, U: {* b4 g4 P- ?* ?2 v- G' ~
  86. GpsWeekSecond JulianDateToGpsWeekSecond(double jd);
    ! B" e" X; x6 s$ v7 h/ W; o+ d
  87. double JulianDateToModifiedJulianDate(double jd);
    . ?5 H/ c/ w, a- ~" o% w. Z1 ^
  88. double ModifiedJulianDateAddYear(double mjd, int year);
    . P4 d( f' D" O
  89. double ModifiedJulianDateAddMonth(double mjd, int month);6 e2 ^9 a0 B9 E. l; L
  90. double ModifiedJulianDateAddWeek(double mjd, int week);, S& K! m( l6 j  r  f* d
  91. double ModifiedJulianDateAddDay(double mjd, int day);/ S% c- Q7 E- |* r! v' [( v
  92. double ModifiedJulianDateAddHour(double mjd, int hour);3 ?& |' m7 J7 R) x! A
  93. double ModifiedJulianDateAddMinute(double mjd, int minute);
    ( G. b, Q- a  e* a4 a1 c* s
  94. double ModifiedJulianDateAddSecond(double mjd, int second);4 F  H  K2 E* a4 K
  95. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd);
    - R* O8 l7 @5 i' R3 [
  96. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd);. Y8 f) S$ b6 t
  97. double ModifiedJulianDateToJulianDate(double mjd);
    2 G5 S! Y* @7 |, N0 l) l* ]7 q
  98. , F# @* D9 R. g- y! Q8 M9 B: {
  99. #ifdef __cplusplus
    . D: `. i0 c' S" Y% }# H: L
  100. }% v  A4 C0 J( }
  101. #endif  /* __cplusplus */
    , `* U' |: h$ x+ N6 p0 a- K! C8 U
  102. ' Q% h% T. K* W/ M# o
  103. #endif  /* __DATETIME_H */2 Z! \' w) @* }7 z" h6 V% F! p
复制代码

  H2 y! ~$ p# g. p6 ]) w7 d* l      DateTime.c文件. A. \1 w' [9 x5 h6 i5 D
  1. /****************************************************************
    9 F7 K/ n5 c, l
  2. * Copyright (C) 2017, XinLi, all right reserved.
    % L! O7 j1 x9 I. J
  3. * File name:    DateTime.c
    . q+ O" f# o7 \4 J9 v; i  G
  4. * Date:         2017.10.17" L) s6 ]7 B, Q
  5. * Description:  Date and time module source file.
    1 O3 B% a$ ^6 B1 M, k
  6. *****************************************************************/: K3 Z& A5 m$ r9 j
  7. ( a) S# C  Y7 q: t$ k
  8. /****************************************************************
    : x/ L# M- U  t* v! l4 L  r5 d2 h6 u/ \
  9. *                        Header include5 D" D. n4 ?; e# \* k; H
  10. *****************************************************************/
    6 D; ?9 j2 H6 v, {! T& c5 P5 C
  11. #include "DateTime.h"
    ) v) S. U, k9 Q3 F7 `) G4 {( g

  12. ! P* I  H! F1 R
  13. /****************************************************************
    , i8 O& h3 E0 C; v+ f
  14. *                       Global variables3 p' A0 ~/ x( J) S) z4 l
  15. *****************************************************************/
    5 e$ D  [8 a! }8 K2 l' U

  16. 9 o; f% F4 r. d/ E$ G* _

  17. ( R# ^* }( A+ S. |, e2 B
  18. /****************************************************************& H3 E6 _- _% s% D2 a- {6 ~
  19. *                     Function declaration8 V# f, ~% u/ n4 k
  20. *****************************************************************/6 @. o0 I$ t3 p& n& P
  21. " [2 x: D; J. G  i. ^/ h7 B# X! S
  22. # D2 Q$ J  D8 T) e4 s: k  K
  23. /****************************************************************
    / [3 n% y4 i- M5 a4 s2 e9 V
  24. *                     Function definition( r! X: h2 \/ ?  b9 Q3 R& `
  25. *****************************************************************/
    8 Y  v  n0 X4 s6 p

  26. 2 ]- s; }0 c3 H0 G/ S
  27. /****************************************************************
    & b3 q& P6 {! j3 M
  28. * Function:    GregorianCalendarDateAddYear
    ( w5 J3 S  C( e  b) P& e$ G" v: I
  29. * Description: Gregorian calendar date add year.: r3 z' k" R- P7 t. X1 s6 z
  30. * Input:       time: Gregorian calendar date., }( o: r9 H4 c# y6 R# f
  31. *              year: The number of year to add., {4 [) G) j) M$ K
  32. * Output:
    & R! L( Z, V8 D8 A2 i
  33. * Return:      Gregorian calendar date.4 V. i$ n* `" W5 }
  34. *****************************************************************/
    ! q- j9 _& D, Z: R7 ~, d
  35. DateTime GregorianCalendarDateAddYear(DateTime time, int year)
    2 z* \( y4 B' w$ m' {0 x" U6 E  Z
  36. {
    5 u9 \3 V2 u: p4 |  ^2 |: l" g
  37.   time.year += year;. d! q) }0 i+ q1 \# I

  38. * e6 K) ~( M/ A6 E; ]; u; V
  39.   if(time.month == 2)7 I5 E7 I2 q" V- Z
  40.   {7 ~) o3 k% F6 Q( M
  41.     int mday = 0;' q& Q" a. }  u

  42. - `, ^1 n2 v$ ?3 Q
  43.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))3 S) E' X7 H, K8 ?
  44.     {
    5 |4 I0 n# c' \; `8 b" O3 O7 Q
  45.       mday = 29;
    6 K$ C6 K8 K& f! u8 g# Y# T0 g
  46.     }
    7 X: _4 w1 R8 _7 S. e( J
  47.     else
    $ ~# C8 H5 h+ J& k
  48.     {% Y) C4 K$ y' D- m  y+ }# H
  49.       mday = 28;
    ( Q' t( P0 C7 ?1 M" d0 X
  50.     }
    # Q  o/ [6 _2 i
  51. - d) ^. t: x. f# `8 h' \2 R
  52.     if(time.day > mday)
    ) T! ^' f* P8 Q. ^$ X
  53.     {
    0 T- e( q" E  N
  54.       time.month += 1;: f3 N) a  w) ?8 [* h- J
  55.       time.day   -= mday;
    , P6 m" i$ Y! N: _
  56.     }
    ! Y" Z4 E+ g+ q# H3 t8 K% M/ z
  57.   }, X4 E" k* w' _# A* K' \- J
  58. 3 |2 A- N- Q" l3 b$ j
  59.   return time;
    ! S' n  X' U. ~" o5 _) ~: T8 }+ s, ?
  60. }
    # S; H( [& C4 K, a6 b" S; Z

  61. : a, k7 L: z1 W. \
  62. /****************************************************************
    1 Z+ T  u! c" y9 @) l2 ?/ k
  63. * Function:    GregorianCalendarDateAddMonth6 T5 K9 N9 X' \1 s, u# V
  64. * Description: Gregorian calendar date add month.1 Y5 H$ _) i8 p; r8 T0 q
  65. * Input:       time:  Gregorian calendar date.
    / i  @0 y0 _  u; g/ C
  66. *              month: The number of month to add.* b8 ~* O" s0 ?: g* z. \
  67. * Output:
    9 b& g$ [) ~: T( G& d
  68. * Return:      Gregorian calendar date.
    & ^0 P, V( L  N8 b6 t) {% |5 Y# G
  69. *****************************************************************/+ I% X# c1 j, C2 S9 M
  70. DateTime GregorianCalendarDateAddMonth(DateTime time, int month)
    2 j3 N- }: l9 L1 J" _
  71. {
    0 n- \- N% m; `) y1 x3 x$ U
  72.   time.year  += month / 12;1 z7 M- B: l6 i# r& p7 ~
  73.   time.month += month % 12;: k6 ~6 h- H+ G7 L
  74. & T0 s. h' p* G9 R( a* E! @
  75.   if(time.month > 12)# ?7 h* W* O/ b8 d6 E
  76.   {/ ]7 H& A6 ?! h7 N. x# Q
  77.     time.year  += 1;
    ) @8 S, S/ m2 g; M; W' x
  78.     time.month -= 12;! ?- k( v0 `; Z$ e5 T0 g% y( f
  79.   }
    9 Y8 D; E8 E' V; m$ B

  80.   `! a( a9 q. ?& b
  81.   int mday = 0;
    5 c4 [) b8 D( ^& h/ ~* L

  82. / k( ]5 W7 j6 s9 A
  83.   if((time.month == 1) || (time.month == 3) || (time.month == 5) || (time.month == 7) ||
    9 t: K& _6 ~; b, }$ F
  84.      (time.month == 8) || (time.month == 10) || (time.month == 12))+ t- E* g& g+ M1 A5 C. A
  85.   {
    4 `5 A  ~- V; e. b) X
  86.     mday = 31;
    . O2 N( l1 U, o. p4 ?
  87.   }4 e) j, I/ s4 ~! |
  88.   else if((time.month == 4) || (time.month == 6) || (time.month == 9) || (time.month == 11))2 W0 r1 A2 p" h5 ~- ~6 l2 I9 l
  89.   {
    1 T9 [* D( N" P! |8 a# E
  90.     mday = 30;
    ' G+ ~1 m2 K+ t5 U9 ~3 a' J
  91.   }9 h- L& r  k+ q( N
  92.   else
    3 A3 a! R  w/ ]& Y, p! }
  93.   {
    / J6 i; {( `; |) T+ [- V' X
  94.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))
    7 X1 w, g' {3 h% P, s% V2 P
  95.     {
    6 C! v2 ^2 f, H! ^- P
  96.       mday = 29;; Q+ o) y! E4 q0 e* q
  97.     }+ j' r; v3 t* O& a  S
  98.     else
    ) @$ C1 O$ [$ D  h8 i. f( N* y' P
  99.     {$ ~2 M( M$ i' O. m( O" {+ L& y
  100.       mday = 28;0 A; H2 Z& A) Y) W3 a7 b
  101.     }
    $ Y3 T* ^, {, i
  102.   }
    & |- Z- x; }! g8 j, `( Z( {
  103. ! N. P/ B9 R: M% \8 o0 I6 [
  104.   if(time.day > mday)
    ' z' N1 \% ?! l2 f5 {0 \
  105.   {6 l, l7 |' F- T" E
  106.     time.month += 1;( W+ X5 o- ]# v2 Q0 n! f0 k
  107.     time.day   -= mday;/ G4 p* [8 T, }: F6 v1 r
  108. * E1 T  F) o1 m  ]0 a) N- W
  109.     if(time.month > 12)
    6 H- p( V' l3 A, Y
  110.     {8 C! m' s. A% y' M* H9 B0 B
  111.       time.year  += 1;/ U' @& |9 Q3 c; S* f
  112.       time.month -= 12;
    ( J( v1 W5 O' P& G8 ^3 S, X. ~
  113.     }
    % v" [& u1 \  P5 p& v, @
  114.   }
    : W! q: a& ~+ ^8 s8 n  ]0 n

  115. ( u" Z+ d( p- p8 @5 z
  116.   return time;4 F" C  h8 C) {5 C. P4 b
  117. }
    7 u3 A$ e, l/ k

  118. - L( H/ L: h: O6 D0 z$ @$ n
  119. /****************************************************************$ E  i8 F0 C' F; B
  120. * Function:    GregorianCalendarDateAddWeek
    7 O, D4 Z/ y+ B  _- W9 j! b5 u
  121. * Description: Gregorian calendar date add week.
    ( t$ J: u1 N! b0 o
  122. * Input:       time: Gregorian calendar date.% @- H. v1 H5 U5 W3 J
  123. *              week: The number of week to add." n: G: Y3 h9 S3 A$ s
  124. * Output:9 @5 }8 I- @1 E  m& F
  125. * Return:      Gregorian calendar date.0 [& H9 Q& `9 Y
  126. *****************************************************************/
    ; g0 S% x- s7 x5 r0 |7 P& I
  127. DateTime GregorianCalendarDateAddWeek(DateTime time, int week)5 D4 ^* v3 T8 W3 N" f$ Y7 C% ~
  128. {
    6 [$ D( }" R& W* o! l6 Q3 \" z
  129.   double jd = GregorianCalendarDateToJulianDate(time) + week * 7.0;' j' n  D9 M+ ]# u2 [

  130. ) ]9 W( V" K5 p5 q
  131.   return JulianDateToGregorianCalendarDate(jd);
    0 k5 e( H# `$ Y' R, X6 I
  132. }4 }0 p( Z5 h3 {2 K" f' z$ q
  133. 8 {- j- s  x, k! m, L
  134. /****************************************************************( X. f) }/ R  I2 ]
  135. * Function:    GregorianCalendarDateAddDay
    # F2 j4 E% ]! U' i# p
  136. * Description: Gregorian calendar date add day.* ]4 F4 e: W( `2 x+ y
  137. * Input:       time: Gregorian calendar date.
    / N3 n# W' N9 J! {) a+ `9 f+ h
  138. *              day:  The number of day to add.
    # R$ k) t9 G7 g7 H$ s9 T# g
  139. * Output:( Z5 |! D0 R' r& y2 I! N
  140. * Return:      Gregorian calendar date.! T: d" j$ _( E; K
  141. *****************************************************************/$ e9 Y5 ]3 [$ A: K7 {7 q
  142. DateTime GregorianCalendarDateAddDay(DateTime time, int day)
    - J$ p% Z& P+ e/ R
  143. {! _. [' N% g' J/ j) e6 f: W
  144.   double jd = GregorianCalendarDateToJulianDate(time) + day;
    2 x, s6 y: `' ~( ^1 |( O+ P
  145. . k$ ?/ L* X; E
  146.   return JulianDateToGregorianCalendarDate(jd);2 B- j8 L; N# @6 y/ Z) L
  147. }2 ?6 M2 z+ M9 t) q6 b" n3 P  h

  148. ( V9 \" k0 e6 W* M
  149. /****************************************************************% k6 f7 x) R% N9 D7 \, a. p& ~
  150. * Function:    GregorianCalendarDateAddHour, X8 E5 P- D/ c& k. W* ?
  151. * Description: Gregorian calendar date add hour.
    5 X* {, s- ~. k
  152. * Input:       time: Gregorian calendar date.  c( U( V5 b* B8 D& r- o
  153. *              hour: The number of hour to add.
    6 N- f% I  }# L) n" j% R
  154. * Output:7 n+ W8 T8 S9 v* y& h4 s
  155. * Return:      Gregorian calendar date.0 Q2 P# K* p. d5 \$ K. h. p& `* L
  156. *****************************************************************/
    ! g3 }/ j' B6 F
  157. DateTime GregorianCalendarDateAddHour(DateTime time, int hour)
    0 l& k: x6 M+ k
  158. {
    , t  N  h3 s: B& Y1 S- y
  159.   time.hour += hour;
    2 i5 ^; J. S' Z, r" j0 D* a

  160. + |& K. {( A' q' K# _
  161.   double jd = GregorianCalendarDateToJulianDate(time);
    / w  b1 b# ^7 D+ _8 G2 o

  162. & F# H" j- A. c" _, h
  163.   return JulianDateToGregorianCalendarDate(jd);
    - ^  E9 I) V) p; j# K& K6 o
  164. }6 J. i2 i& O  L, z1 Q

  165. & @" w: j% }3 M6 x& O
  166. /****************************************************************2 ~: k( c- a% S' A2 t
  167. * Function:    GregorianCalendarDateAddMinute
    - b" D/ m; M1 I( L) `; Z
  168. * Description: Gregorian calendar date add minute.  s, D* Y. W7 Z! a% M
  169. * Input:       time:   Gregorian calendar date.
    % S, L: \! J8 w& c9 t7 n
  170. *              minute: The number of minute to add.3 F) L0 R+ Y8 i% L) `( p) ]
  171. * Output:" \( x! ?' p5 h$ l: n* h# |
  172. * Return:      Gregorian calendar date.
    $ ]' J# J! n4 @! s" U
  173. *****************************************************************/( I5 P" m9 E) p5 P
  174. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute)
    + E* P0 V- v3 `; y9 }' ?, a, A
  175. {
    * p! Z; l$ X% U- R/ S
  176.   time.minute += minute;
    * \9 q* W7 J; W( T

  177. ( b( G; @/ r% }  l4 k# n6 x
  178.   double jd = GregorianCalendarDateToJulianDate(time);- ]* f# |7 }& D" j$ ^6 w
  179. 9 x8 n/ ^! k- s2 F8 h
  180.   return JulianDateToGregorianCalendarDate(jd);
    . N5 m# t7 p$ ?
  181. }
    * e- h- a) G. h3 a3 b& q4 P* v
  182. $ c/ C7 B. E- t$ W9 b4 ?
  183. /****************************************************************; Q$ U3 M& k1 o5 @' p0 u6 B
  184. * Function:    GregorianCalendarDateAddSecond
    ! |' y' N6 H6 O3 v3 `9 q
  185. * Description: Gregorian calendar date add second.$ a4 |$ i- G" i0 A$ ^: A7 s6 t
  186. * Input:       time:   Gregorian calendar date.7 G' v9 a; O" ~: {6 {/ s
  187. *              second: The number of seconds to add." ^8 b2 h6 u# u2 C% O0 {
  188. * Output:
    + N2 z! G. a, m4 Q
  189. * Return:      Gregorian calendar date.
    * x  A0 {0 ^9 a' {+ ?" G8 R
  190. *****************************************************************/
    ! h3 F- @7 `# |% d3 i3 h& S
  191. DateTime GregorianCalendarDateAddSecond(DateTime time, int second)
    / B9 n: ^/ E5 o& |4 x2 S) L5 q
  192. {
    " }% F8 F0 P& w
  193.   time.second += second;
    2 k3 Q1 l$ X7 W

  194. * o% L% P1 t8 `  W# X
  195.   double jd = GregorianCalendarDateToJulianDate(time);) |. T+ d: D% Z" T
  196. : e# f# p: E, H  D/ J
  197.   return JulianDateToGregorianCalendarDate(jd);
    2 }5 H/ f! s1 f8 ?' K
  198. }* @" t  r( b8 C

  199. 3 Q% ?$ @: m+ f5 \
  200. /****************************************************************
    6 X& `+ N# s* z. t- r
  201. * Function:    GregorianCalendarDateToGpsWeekSecond
    ( |) a) Y8 d# c0 H
  202. * Description: Gregorian calendar date to gps week and second.$ a+ c# t# X3 t
  203. * Input:       time: Gregorian calendar date.
    ! I- u: @! x' a. B. N# _+ F
  204. * Output:
    ' R' Y, A$ d6 y/ {3 l+ x6 v
  205. * Return:      Gps week and second.
    $ J3 ?9 j' Y) L& ^. I5 b8 K
  206. *****************************************************************/9 p6 _0 ?. h3 ~! X7 c# A' J
  207. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time)0 g4 {6 b) y: K3 ?
  208. {: a0 @. Z# Z! y* Z" \" g# y
  209.   double jd = GregorianCalendarDateToJulianDate(time);
    / P, x" L# e" i0 N; v' J$ D
  210. # }. b$ c2 Z  x8 O& _7 v
  211.   return JulianDateToGpsWeekSecond(jd);  t2 f! p3 }2 F; {  m7 q
  212. }- S$ \( S) @4 h8 P
  213. 9 @6 m+ W1 V- U% Z- T- z
  214. /****************************************************************" V4 x" ~8 S5 a, ^& S! ]0 n
  215. * Function:    GregorianCalendarDateToJulianDate
    + v3 ^# E+ P8 @/ r
  216. * Description: Gregorian calendar date to julian date.
    0 y  z0 `" c0 a+ w; l7 z: K
  217. * Input:       time: Gregorian calendar date.% X: P; ]5 e8 n2 }5 r4 `
  218. * Output:6 A, r9 V& D+ X: X& O, E
  219. * Return:      Julian date.% g0 ]! @- T9 z0 q) K5 q1 z) ^. S
  220. *****************************************************************/
    # |* Z! F) p$ Q, b/ B( H# Z
  221. double GregorianCalendarDateToJulianDate(DateTime time)
    " b: y5 u+ K0 f4 h" p
  222. {
    - ~% W8 M+ J  Q- m
  223.   int jdn = (1461 * (time.year + 4800 + (time.month - 14) / 12)) / 4
    ; G6 v* U5 P" v* Y& J
  224.           + (367 * (time.month - 2 - 12 * ((time.month - 14) / 12))) / 124 D7 A5 M4 ]% n, u" l
  225.           - (3 * ((time.year + 4900 + (time.month - 14) / 12) / 100)) / 4
    & M' e: b! Z( o: w
  226.           + time.day - 32075;
    ' z% C: H. _' o' U- @$ I1 q! N
  227. * L, u1 N* n2 |: n
  228.   double jd = jdn + ((time.hour - 12) * 3600.0 + time.minute * 60.0 + time.second) / 86400.0;
    - Z0 a2 A3 C( t: l0 x5 C( @0 U" [

  229. & Q4 I+ Q" Q4 {1 i& H: I
  230.   return jd;/ O0 ?7 J8 N7 f$ e  c' \
  231. }
    $ z" _' ]5 B' k7 ^$ H) X3 y

  232. 4 O/ g. x/ ~; P/ c; m* Q
  233. /****************************************************************
    4 b& @4 @- s1 y
  234. * Function:    GregorianCalendarDateToModifiedJulianDate
    4 a/ @/ p# ]) ?
  235. * Description: Gregorian calendar date to modified julian date.. s/ y) m# ?" O
  236. * Input:       time: Gregorian calendar date.' j; Q9 T3 U8 \' ?5 }/ A, @
  237. * Output:
    8 ]" F! P% f2 `( q% }" ^# @
  238. * Return:      Modified julian date.
    , h# i) q0 f6 t- l) i: n
  239. *****************************************************************/! ^+ h' b) C& V2 A+ M
  240. double GregorianCalendarDateToModifiedJulianDate(DateTime time)% ^4 M5 Z1 k7 f
  241. {
    1 D7 ?6 p+ X' S
  242.   return GregorianCalendarDateToJulianDate(time) - 2400000.5;
    0 P3 D8 c3 `5 a. R# e! o
  243. }
    3 ?: M& k& A1 s" L( Q; N
  244. + y, e+ `- z" |7 X: T. P7 h
  245. /****************************************************************3 i* r* f6 U9 \4 L
  246. * Function:    GpsWeekSecondAddYear( p+ B9 Z; T  C( p; v8 s' I
  247. * Description: Gps week and second add year.
    $ f) `4 e9 K& [# R6 s) i0 I
  248. * Input:       time: Gps week and second.
      N' C9 z& a/ C- d4 U& ?0 K
  249. *              year: The number of year to add.9 P. o) V# C7 e( H2 I/ X
  250. * Output:7 e' a! T. x  ^/ W" W( B. d: n
  251. * Return:      Gps week and second.' ?- O0 S+ {9 q. v2 o0 ]) U+ p
  252. *****************************************************************/
    % H3 H' _0 a+ i
  253. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year)
    . j5 a8 q. f+ u; q9 q: Y
  254. {1 G6 A9 j$ Z8 r% d
  255.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);
    , L% |+ w1 r  ^7 `* K2 V6 P0 l# I
  256. % `9 p; M2 E, p4 b) n- f
  257.   date = GregorianCalendarDateAddYear(date, year);6 \7 N2 Q' m8 I/ Y; W9 K

  258. " B# T% q1 I3 _& ^* B- I
  259.   return GregorianCalendarDateToGpsWeekSecond(date);
    % h  l) Z2 k) o
  260. }$ E0 O0 E1 _& M( b
  261. : b- C# F) K# e7 g1 I+ V
  262. /****************************************************************
    2 q9 F1 B3 m) `% D6 j! B! b2 j) p
  263. * Function:    GpsWeekSecondAddMonth
    . ^# F: N; K- C: T; l
  264. * Description: Gps week and second add month., ]  `, q5 Q7 E) J1 s8 N
  265. * Input:       time:  Gps week and second.% ?! [( B) C* c
  266. *              month: The number of month to add.( G7 G$ K' ]7 y% d- u" A
  267. * Output:
    1 l2 w2 w% R. E' c
  268. * Return:      Gps week and second.
    2 L4 S8 K, b& t/ M# {: X
  269. *****************************************************************/% O9 I6 b  r" l2 r) c" [
  270. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month)% B4 a4 ~( j3 I. }- Y! ^
  271. {
    - N8 G3 ^' c6 f6 @. }7 y( j
  272.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);
    ( e$ y( E  N# c. u) g

  273. ' d4 R; R2 o* K5 x
  274.   date = GregorianCalendarDateAddMonth(date, month);# Y3 R" u3 X) Z

  275. & I. G9 f" x0 C/ q4 I( f3 B
  276.   return GregorianCalendarDateToGpsWeekSecond(date);
    ' `8 Z* G& x9 K6 R, d! P$ y
  277. }' j! D% @# C/ v9 b

  278. ' Z. h4 I2 R1 G2 K0 f' F9 Z9 P! k; X4 T1 d
  279. /****************************************************************. b5 u- Y, I+ D6 G4 _8 U! |
  280. * Function:    GpsWeekSecondAddWeek) _: F& ?6 i+ }$ Q! y1 J6 D# F4 X
  281. * Description: Gps week and second add week.
    / ~' n: L! ?# X: J2 h+ U
  282. * Input:       time: Gps week and second.
    $ m% e7 G8 w4 b) m5 S! l1 L
  283. *              week: The number of week to add.0 e& ]# b3 ^0 N6 K3 [  @  W* V+ }
  284. * Output:
      z: I! t  C! B% c8 s" e- ?3 r
  285. * Return:      Gps week and second.
    % Z# ^5 Z# @1 K8 S* k4 S3 ?
  286. *****************************************************************/
    : Z9 m6 Q5 ?* x9 K$ E' j" k! L; w
  287. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week)" J8 o* i8 ]* N/ k- M* n: a3 M
  288. {) S# K, F$ d8 L% i' p; d3 q$ o
  289.   time.week += week;) n8 B7 N4 h8 F- S( w
  290. ( n3 C* c( Z* `/ h/ l" P+ t; N3 ?
  291.   return time;
    ! ], h( E$ j3 o* n: ^
  292. }8 K% G2 E' z; o# [" Z

  293. + f( J- k) m  `, D3 j
  294. /****************************************************************
    0 z8 ^! G' d+ e
  295. * Function:    GpsWeekSecondAddDay
    3 N+ M+ M) y( h0 ~) `1 {" h
  296. * Description: Gps week and second add day.$ \/ k$ a0 I' g1 ^. b. b
  297. * Input:       time: Gps week and second.
      W: V  p9 Y& `1 v. `
  298. *              day:  The number of day to add.
    1 H$ N9 w* n3 H  e2 j: \1 x; k
  299. * Output:
      W4 b8 D$ N5 ^: m) B
  300. * Return:      Gps week and second.9 ^& q$ U" Q( x7 o8 d" Z- f0 \
  301. *****************************************************************/
    + i% }9 K  Q7 _, H" ~
  302. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day)3 L, Q4 R" Z) k+ S! N
  303. {+ M3 {9 S$ i  k6 _& R$ ?' q$ O
  304.   time.week   += day / 7;1 g5 p. O# F. Y# [: y: @
  305.   time.second += day % 7 * 86400;
      F- C/ w- P+ Y0 ^$ K
  306. , l/ ?9 k  S% N3 i* S0 T3 a
  307.   if(time.second > 604799)5 o% J# L$ c% t: G1 g5 H* o+ B: F  V, h
  308.   {& D' p( D- a9 V) M0 v/ v
  309.     time.week   += 1;+ K2 S+ S1 k' A5 D' V; m8 a! \( b
  310.     time.second -= 604800;: P. z# V( ^% [& j4 v2 d
  311.   }
    2 _' f! i9 z$ v* f: r: [- Q' @

  312. " H: v0 H; c: N. Y) x0 @
  313.   return time;" ]% _6 X7 z& x# H/ Q# m" t/ a
  314. }/ d" X& ?9 b. e' G8 M

  315. 2 e7 t2 y3 l1 H. p
  316. /****************************************************************# k- o& Z& y# S9 r) ^
  317. * Function:    GpsWeekSecondAddHour
    ) C! w1 L) ^# `6 ~# W, d' U! y1 J
  318. * Description: Gps week and second add hour.& X) }/ k3 I5 y6 m8 u# A% v
  319. * Input:       time: Gps week and second.- z. w9 d7 k) g
  320. *              hour: The number of hour to add.
    + @/ R2 t. x( F
  321. * Output:
    . i7 w: h' N2 ~& g1 n3 p  \
  322. * Return:      Gps week and second.
    8 z0 |0 s5 I# i- u" o
  323. *****************************************************************/% z* W- ~  j% z  L5 m
  324. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour)7 s/ ^3 Y/ U% j( e2 C
  325. {* U. K& _; ^% y$ E  p& ?2 L" N
  326.   time.week   += hour / 168;
    / L* N$ n5 [6 _. f
  327.   time.second += hour % 168 * 3600;: J) |  r9 F2 m, C2 A
  328.   `0 C! W9 P( d2 y: @7 j
  329.   if(time.second > 604799): B9 F, n+ S/ _, }
  330.   {. D$ Z, W' Y  W( g+ V
  331.     time.week   += 1;
    1 D) H. ~# ^5 j& F' u' ?
  332.     time.second -= 604800;* y6 P  ~& z! g0 Q8 Q" H  e
  333.   }2 ~  ]1 K6 x, x' C1 c
  334.   
    # [1 u3 v7 w$ O9 K/ @% y" l& i
  335.   return time;
    % i2 J! S% L: a; h4 C/ y- _6 ~1 Q* W' g
  336. }7 J4 ]! ^$ Y5 ?
  337. ! M$ J. K; x3 U1 y4 W
  338. /****************************************************************8 s- f$ I: W" l  U, Q1 z
  339. * Function:    GpsWeekSecondAddMinute  L" Y+ b! e# B3 C" M( g
  340. * Description: Gps week and second add minute.
    ) y) X% Y/ `/ b
  341. * Input:       time:   Gps week and second.
    ! v) o+ L( {4 j) O$ c: u
  342. *              minute: The number of minute to add.! E% D" ^& i7 ]+ e7 Y" W" s
  343. * Output:# S( M9 o9 \. r3 ^2 o/ J! k
  344. * Return:      Gps week and second.
    ) D3 ?5 h3 F  d7 y
  345. *****************************************************************/
    + D0 R1 o2 Z! A2 D3 I
  346. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute)- Q+ L! a& A+ x* P" q; b& K
  347. {- L! Q& ?/ x3 e4 g. G& u5 ^7 H# S- o- I
  348.   time.week   += minute / 10080;/ Q# {- ~) p* P9 y- f
  349.   time.second += minute % 10080 * 60;* V. t1 o4 h! @% `) ?4 Y9 O& @
  350.   & Q+ Q( g$ n; y& D: a6 H, _
  351.   if(time.second > 604799)$ ~- ?# K. O9 w9 `
  352.   {
    4 P" C% M, F$ @. C& m$ w
  353.     time.week   += 1;
    % C% C; C- Z$ ?- G
  354.     time.second -= 604800;
    % T. a  C3 x7 X% ]6 n7 z4 |0 l, ^3 j0 T
  355.   }
    : f. }# a4 n/ O
  356.   ; Z# a3 _/ Q, E( y/ y; i
  357.   return time;
    # {9 w4 o5 t0 G5 f) F
  358. }+ B  G# {+ d1 g. `
  359. , v9 T6 M" h% _; a7 H
  360. /****************************************************************! Q( P# }) V  P
  361. * Function:    GpsWeekSecondAddSecond
    ) N; T- P8 h5 d  ], Z
  362. * Description: Gps week and second add second.2 @5 [2 x1 |9 d8 w: p
  363. * Input:       time:   Gps week and second.
    * v, a* R) j3 E# ?& T+ l
  364. *              second: The number of second to add.
    " x- A6 L4 L. j" \( g/ j
  365. * Output:% Z3 B+ ^: U. ?3 C6 I1 {' n
  366. * Return:      Gps week and second.& z. w9 p/ B8 x' ^+ F- c/ @4 t
  367. *****************************************************************/
    3 e6 W: l4 Q# U/ u/ }8 j7 {& ?8 i6 N
  368. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second)
    0 f; w* }, `; ?' c9 t, Q9 ?( s3 P
  369. {& z9 c) N  g; X3 m; ~; M2 ^0 `
  370.   time.week   += second / 604800;
    # @% G# j- R2 k& z2 J
  371.   time.second += second % 604800;" T7 Z# O9 Z& Q
  372. . V0 z& w8 A" p
  373.   if(time.second > 604799)
    2 J. ^% y3 T, D& ?' l
  374.   {
    8 p% O9 @; k: f8 n
  375.     time.week   += 1;
    * Z8 B& v! ^) |8 O
  376.     time.second -= 604800;. h/ `2 X% B+ J! g9 Y. j
  377.   }
    # M  \7 I2 \4 v* V
  378.   
    5 C- t* n' }7 p$ R. S6 h
  379.   return time;
    + A5 |. v/ a6 _2 A( i3 M; b
  380. }
    4 O& e& R3 x8 U+ G6 G* M0 \

  381. ) t7 e. M6 p) M3 T5 E+ s
  382. /****************************************************************
    " l9 L* i; E4 i2 C* p% d3 ?1 ]/ k
  383. * Function:    GpsWeekSecondToGregorianCalendarDate
    , F; f; Q7 n8 c* J
  384. * Description: Gps week and second to gregorian calendar date.* s8 a7 t; U' y7 M5 a* _2 ]
  385. * Input:       time: Gps week and second.
    , y5 Q- v) e- `
  386. * Output:
    9 ~5 q7 z. w4 r5 q
  387. * Return:      Gregorian calendar date.
    9 T* ?& o0 `8 G1 f
  388. *****************************************************************/
    : G. R  q& |( M6 [" H' S
  389. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time)
    ! U9 D! y3 A" r
  390. {
    ( P3 _( y, r. A: B; J9 s, H
  391.   double jd = GpsWeekSecondToJulianDate(time);
    - m& p! I" W# m! T9 v0 I+ F! I, r
  392. ' z+ S6 M# s( O& {- g/ Q
  393.   return JulianDateToGregorianCalendarDate(jd);1 [" U8 q' e  U5 C
  394. }" [( E+ z% h3 q: l+ c" m
  395. 7 I" t( M; r  y3 S5 K$ ]% F2 D1 ?
  396. /****************************************************************
    ( x1 F+ `2 w- O0 d, [
  397. * Function:    GpsWeekSecondToJulianDate
    4 \8 _3 S0 `! H# j
  398. * Description: Gps week and second to julian date.
    * W9 g7 m0 v0 x1 P2 H7 |1 J1 P
  399. * Input:       time: Gps week and second.
    ( m- F1 l/ P- V+ p1 k2 e
  400. * Output:
    # }2 R+ Q) q1 M
  401. * Return:      Julian date.
    , _' X% B8 ]# }2 V$ V( \
  402. *****************************************************************/
    ; @( [9 Z0 i/ _; Q8 f% ]- y9 D
  403. double GpsWeekSecondToJulianDate(GpsWeekSecond time), c9 j9 `. B* Q
  404. {7 |) V. |2 x! j& k5 t1 C4 |- m
  405.   double jd = 2444244.5 + time.week * 7.0 + time.second / 86400.0;, ?6 n' u6 @/ p5 q0 }% R% L8 i
  406. / |3 q$ ^  b3 Y% e* @3 @
  407.   return jd;
    9 j" W( }! v" f3 R  S' `
  408. }
    ; X$ m7 v  o, Z$ e$ L

  409. $ K/ s2 o; p) `4 `
  410. /****************************************************************- k, j. j! j! X! o# s: e' G( N
  411. * Function:    GpsWeekSecondToModifiedJulianDate) `: g+ U$ X! ]7 {" q
  412. * Description: Gps week and second to modified julian date.) t4 P& P5 m! J$ `  g' @; f# u
  413. * Input:       time: Gps week and second.
    : E5 H1 I4 ~$ m) A2 L0 e/ \0 T8 e
  414. * Output:" A: V: U& Q) m/ o/ T4 I
  415. * Return:      Modified julian date.
    : |) {% b* D' x; P# i9 [
  416. *****************************************************************/6 {, O( H/ o8 P* v9 i
  417. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time)
    7 }  g" o5 e  s4 c$ n" |5 M3 E; y
  418. {2 v! U9 _8 w; q; |+ {
  419.   return GpsWeekSecondToJulianDate(time) - 2400000.5;
    # s2 l( ?' a% ?, X4 t
  420. }
    6 O+ s6 ~7 R, c6 E9 P/ E  w! {1 N- u
  421. 8 [3 G+ g) S( ~& w& o- T
  422. /****************************************************************
    " |2 d2 _- s2 e+ ?# r, F. n
  423. * Function:    JulianDateAddYear
    % H& l: K$ h# Z. a, Y) |0 @! ~
  424. * Description: Julian date add year.. d+ @* L% k( z; S
  425. * Input:       jd:   Julian date.8 y9 m6 P9 w: Y
  426. *              year: The number of year to add.* _1 }' V( n& P8 n
  427. * Output:
    6 }1 u! I1 ^$ a& L
  428. * Return:      Julian date.9 \2 x4 l# M, C! q' d
  429. *****************************************************************/
    " z; ^6 y! ~. i& i$ l8 c. \
  430. double JulianDateAddYear(double jd, int year)7 t1 D& j# d3 C  @: |3 L
  431. {; @2 R3 Q$ M3 k& X% S
  432.   DateTime date = JulianDateToGregorianCalendarDate(jd);7 X& i6 x  L$ F
  433. : q9 G" }! E0 O: V3 @/ b
  434.   date = GregorianCalendarDateAddYear(date, year);
    + L$ j/ m" g0 x

  435. ! \% x) M3 _' _
  436.   return GregorianCalendarDateToJulianDate(date);, Q4 T  ?5 G  K! A! I+ [
  437. }
    ! Z) J& [9 ]0 q3 u9 Q

  438. + L; _: P2 k- G6 \* J
  439. /****************************************************************
    1 E9 P0 W# @  |+ j2 [2 x, Z7 p' L, B
  440. * Function:    JulianDateAddMonth5 l% K/ G3 c# b6 P3 z" w
  441. * Description: Julian date add month.4 C: s/ O! @% M0 o$ q
  442. * Input:       jd:    Julian date.' Z3 N$ U. Z3 m4 c7 }! O
  443. *              month: The number of month to add.
    9 D" Z6 I" X: O/ Z4 t
  444. * Output:, F: F% q4 x$ |/ g. o% v
  445. * Return:      Julian date.* Z6 [7 e  @7 a# {
  446. *****************************************************************// C  b, C, Y9 s
  447. double JulianDateAddMonth(double jd, int month)
    $ X1 }" S& m8 G. h% X3 O
  448. {
    , T/ J7 X& ]* H- {6 X5 G- a. V
  449.   DateTime date = JulianDateToGregorianCalendarDate(jd);
    6 @' y; D3 g) g# T. E8 H& |& y
  450. 0 f  ~; V8 t8 l6 }, ?
  451.   date = GregorianCalendarDateAddMonth(date, month);: u3 t& w4 q. r8 ?: P

  452. ; V* w4 U% P1 {
  453.   return GregorianCalendarDateToJulianDate(date);9 `2 P" \& l9 P& g2 w# L
  454. }8 m& u9 k' d% I, x
  455. ( w% q; _2 T3 e- t* R
  456. /****************************************************************
    $ ^) a: v( h$ Z* E! N) }5 X
  457. * Function:    JulianDateAddWeek
    * [, p" R! R3 }; A) `
  458. * Description: Julian date add week.
    3 f. x" C' K0 N. E" B
  459. * Input:       jd:   Julian date.( i) G' T, j! }$ b$ \% k
  460. *              week: The number of week to add.: G. n1 n/ F# t
  461. * Output:: J5 f* ~3 V$ F% M- s3 K2 V/ O
  462. * Return:      Julian date., P" ]9 w; B: _( N6 e
  463. *****************************************************************/) |+ N2 u! e, K: a
  464. double JulianDateAddWeek(double jd, int week)
    " S* P7 K* l/ D
  465. {
    # m/ ~- o" }7 e  r* r# k
  466.   jd += week * 7.0;
    % W" N0 T  K3 u8 b

  467. , X& }" m  @9 P
  468.   return jd;
    $ A" v: N$ x2 w- F) C
  469. }+ `4 N' e& C) c# z4 Z! [
  470. 5 T+ ~# D6 J6 I. G' t3 }
  471. /****************************************************************3 r2 Z  }1 S+ B; a+ j8 {& ?7 E
  472. * Function:    JulianDateAddDay( r6 y1 t' b% z; ?$ R# m+ B: u
  473. * Description: Julian date add day.; m8 [. W) m( d
  474. * Input:       jd:  Julian date.
    / z+ @" B% b& U7 W* t, B, O9 }
  475. *              day: The number of day to add.) u1 v! J7 j. o& L) b8 ~5 ]) a
  476. * Output:
    ( a8 l7 \# N/ B, D6 h& M( k1 d
  477. * Return:      Julian date.8 [: p7 {* k9 E: A- C& @5 L, `
  478. *****************************************************************/" k/ M! w' U. ^2 n; y
  479. double JulianDateAddDay(double jd, int day)+ f( w7 [" p/ f% o1 \+ ?) b# y
  480. {+ ~* L1 I! z3 V0 w9 Q& P
  481.   jd += day;; O1 k' {6 D1 W0 n' G1 p
  482. " f, O, H+ p) f( f6 p
  483.   return jd;
    ) e" J% @  x" \" M
  484. }
    5 T  t$ m* U0 g$ Y8 [8 o3 `

  485. 0 ^% o: J  G! m) L6 U
  486. /****************************************************************: m; G  ]. m! U& B
  487. * Function:    JulianDateAddHour5 K: e2 N# V0 u( J, F7 h# U
  488. * Description: Julian date add hour.
    / o# k1 @1 k& r7 D* Z4 Y7 a
  489. * Input:       jd:   Julian date.
    6 n/ H3 Q! l. D: u- H1 Y, b; a" R8 `- T
  490. *              hour: The number of hour to add.
    0 b5 _( Z: F" G/ l
  491. * Output:
    4 Z+ ^. V; l8 i6 B
  492. * Return:      Julian date.
    / U& q8 `3 J0 t; a9 g/ |
  493. *****************************************************************/4 H. o0 X! M: r0 [
  494. double JulianDateAddHour(double jd, int hour)
    ( o. h6 f. P* G+ S
  495. {1 w, N( `& B# t2 E
  496.   jd += hour / 24.0;
    + v) U( `$ d2 m2 s1 g9 }0 n

  497. - p. I, Z! X) K+ j  X7 s9 O
  498.   return jd;
    ! x/ Y. H2 v, m: z
  499. }/ [; t2 l! l; C( }1 Z* ]: a; S
  500. . Z1 [6 o, ?( E  Q- w3 Z7 {
  501. /****************************************************************
    # F1 O- v$ L# C2 e  g
  502. * Function:    JulianDateAddMinute
    3 p9 o  g/ k9 t4 m  |& b6 w
  503. * Description: Julian date add minute.
    9 T. k, ]6 l/ V: P6 f
  504. * Input:       jd:     Julian date.
    ( E; {% q& O* z2 C
  505. *              minute: The number of minute to add.
    1 M" h6 i8 f( ?: {. j1 x; A
  506. * Output:
    ! w- P& w. C  U+ X
  507. * Return:      Julian date.
    8 Q- C- s: d+ `) @/ B& B
  508. *****************************************************************/6 b/ |5 [! n$ G6 V- A' I# ]
  509. double JulianDateAddMinute(double jd, int minute)! L) G* X3 V/ G1 M! {5 b4 m0 G4 ^
  510. {
    / b% e. o2 Z3 J0 E' V% q
  511.   jd += minute / 1440.0;% ~+ r$ u" w, q  O# f8 L. B: a
  512. ' n% N$ n! Z  G
  513.   return jd;
    , y& C" F; O; S
  514. }
    6 ?$ F: V- g1 g3 A, K7 C
  515. 4 t3 Y; l& R/ h: U8 H3 E  l( q
  516. /****************************************************************7 d2 \* {7 j* }9 V0 T# d
  517. * Function:    JulianDateAddSecond4 [$ [" t% K: b6 J
  518. * Description: Julian date add second.
      J2 a( U9 G- r
  519. * Input:       jd:     Julian date.
    . W: U& ~9 A* e2 g. v* w
  520. *              second: The number of second to add.; S+ g; S6 K5 z; b8 `
  521. * Output:( k: N7 Y5 A2 Q9 }& V0 g7 l6 V
  522. * Return:      Julian date.$ j8 x, N4 u4 H
  523. *****************************************************************/
    - M& ]$ F/ z2 Q. z: A
  524. double JulianDateAddSecond(double jd, int second)6 q" V6 C0 A. S- b: B. w
  525. {
    ' ]" a# o. P, Z, q, p7 G
  526.   jd += second / 86400.0;
    % x" l0 C" N' y) G. Q
  527. ( {" v/ P  v/ q+ q% W
  528.   return jd;- |) \5 a' z* i+ `, _% Y  H* L2 v
  529. }9 n) z4 l% y) q2 K& }5 c8 ]

  530. + o# K( a7 |; F
  531. /****************************************************************
    $ d0 v- |$ u/ @( K; m- D' |4 d/ ]
  532. * Function:    JulianDateToGregorianCalendarDate
    , v. f0 l+ A4 r1 I% F$ m
  533. * Description: Julian date to gregorian calendar date.
    # V0 M8 n! z: u# a) q
  534. * Input:       jd: Julian date.  e' l8 e" B' K4 M9 d4 C) V! V
  535. * Output:
    6 |' Q. Z1 Q8 i, T1 [/ B' x3 S
  536. * Return:      Gregorian calendar date.& _* n3 |" B; D. M0 c$ @$ W! T
  537. *****************************************************************/0 D" ]% z  _$ v, H: V
  538. DateTime JulianDateToGregorianCalendarDate(double jd)! J& H" T5 E. ?9 t; x$ b( p3 n
  539. {
    5 U* i# X  S- S" K) P- e6 N4 Z
  540.   int y = 4716;8 y# w- G9 _: l" F* y
  541.   int j = 1401;
    & n  a$ M$ }; C2 ]
  542.   int m = 2;
    4 \# i4 ]3 j4 B( c/ k
  543.   int n = 12;  o" ]4 k6 e4 m6 X) _
  544.   int r = 4;5 ^/ b/ x3 o. Z3 p  {
  545.   int p = 1461;
    7 A  W, h5 g7 f, }, I5 s
  546.   int v = 3;. I' ?, A3 l* T/ g- W6 i
  547.   int u = 5;* j0 O$ G+ C. \! [5 d2 d, h
  548.   int s = 153;
    " {  m( L9 \" B1 |. X
  549.   int w = 2;
    6 b* k+ x& g, ^% `: W4 X8 d# V/ R. p
  550.   int b = 274277;
    & P6 T# w( o0 N  b9 B! X3 [
  551.   int c = -38;* x5 F, O7 z8 x& o7 l

  552. / E3 Z! ]# N4 F$ ]0 C
  553.   int jdn = (int)(jd + 0.5);
    * j! T7 E6 E, T: c) j; j1 o( L
  554.   int f   = jdn + j + (((4 * jdn + b) / 146097) * 3) / 4 + c;6 e/ S% z- M" A' G% `
  555.   int e   = r * f + v;8 j* M  E# _0 n1 ]' i9 M
  556.   int g   = (e % p) / r;! k% t3 S- \5 j4 n3 ^6 z
  557.   int h   = u * g + w;
    & p1 r7 }1 i+ L4 ~1 U; o; a, H
  558. 5 K8 E: E  Q7 p4 s
  559.   DateTime time = {0};
    # p, f7 z6 b5 W' C
  560. 2 `- W! W" k1 x
  561.   time.day    = (h % s) / u + 1;% d' N7 S: q# ]9 Y4 W+ r2 ~
  562.   time.month  = (h / s + m) % n + 1;0 W- {$ c4 ~3 K" ]8 X- f
  563.   time.year   = e / p - y + (n + m - time.month) / n;
    ) Z3 T* |8 s" O6 R( g
  564.   time.hour   = (int)((jd + 0.5 - jdn) * 86400.5) / 3600;5 M1 ?4 O0 q# W* [4 a+ L% T6 l
  565.   time.minute = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600) / 60;' w" D5 M/ l% m
  566.   time.second = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600 - time.minute * 60);' B' A& f9 B7 t& R" G

  567. $ B7 Q- o1 Q- }
  568.   return time;
    6 P! m3 ~/ w' z( D
  569. }
    + e2 M6 t( ?$ W; ~; P5 W0 c
  570. $ F) l! F3 Z+ C* s
  571. /****************************************************************& w7 y, m4 D$ P3 X
  572. * Function:    JulianDateToGpsWeekSecond
    ' V6 x- M0 G: r/ W" m
  573. * Description: Julian date to gps week and second.
    6 D1 P* a/ T) z
  574. * Input:       jd: Julian date.6 h7 |$ i) S4 w0 e; h
  575. * Output:9 T$ ^  E1 c$ \
  576. * Return:      Gps week and second.  V  O0 P) ^; m; f& S/ P9 p
  577. *****************************************************************/3 W' ^4 D" I1 u# e" S
  578. GpsWeekSecond JulianDateToGpsWeekSecond(double jd)
    ( p& J7 Q" ?4 ~  ]% p
  579. {& A  \5 M( J' ]" ^* T* F0 j! T
  580.   GpsWeekSecond time = {0};* _) V1 J! d. C5 M+ c/ I
  581.   DateTime      date = JulianDateToGregorianCalendarDate(jd);2 C0 a4 j7 z  x) g, F; D! I
  582.   f' f' G8 M+ m- ^
  583.   time.week   = (int)(jd - 2444244.5) / 7;
    3 d7 t5 y; E3 m& a6 W) [
  584.   time.second = ((int)(jd - 2444244.5) - time.week * 7) * 86400 + date.hour * 3600 + date.minute * 60 + date.second;
    , o  p5 U7 A& I; |3 O6 I

  585. ; B! _' f( m* q$ y3 w0 M
  586.   return time;
    ! |+ \4 T3 X# {/ r7 q# L* b
  587. }
    # o! z" b  L3 }4 }2 r
  588. * k$ J" I% s& y
  589. /****************************************************************' A8 Z$ s! ~4 v( i7 O! F* `
  590. * Function:    JulianDateToModifiedJulianDate
    5 u# h1 ~' r% w
  591. * Description: Julian date to modified julian date./ K* |8 J# D5 @7 |% M* ~
  592. * Input:       jd: Julian date.) S, J  n1 e2 U4 E4 X
  593. * Output:) z  [' f- G8 ?' d4 A* j
  594. * Return:      Modified julian date.
    ; Q) V- E) \# S! a6 l
  595. *****************************************************************/
    4 f. [5 b: o7 ^3 Z, E
  596. double JulianDateToModifiedJulianDate(double jd)+ A; p0 K" q+ S. g/ }& i' t
  597. {  Z! }) R$ K; @2 O% s2 Z* B/ p1 _8 ~
  598.   double mjd = jd - 2400000.5;# v! f, N8 K6 {% L+ Q5 ]( h

  599. & c' P7 r: I# ~& d
  600.   return mjd;2 Q( b- ]5 h. O* R
  601. }
    9 F! }  p$ R( W5 A7 y0 m% B

  602. 2 H3 B2 F0 r( Y1 ?6 T
  603. /****************************************************************
    7 {* y* S1 q( h4 n/ ], M: d) C- a
  604. * Function:    ModifiedJulianDateAddYear
      R2 K3 N0 e# I* \
  605. * Description: Modified julian date add year., }2 t$ p7 m# y
  606. * Input:       mjd:  Modified julian date.
    7 q1 r& l7 k$ D2 ?% h: {
  607. *              year: The number of year to add.9 J3 k) @+ g2 z3 k
  608. * Output:
    7 ~) z* A$ A, q
  609. * Return:      Modified julian date.
    : Y2 ?% S2 ~" u0 x0 E
  610. *****************************************************************/3 L# Y2 k6 g6 A: I2 T! ^- {1 E
  611. double ModifiedJulianDateAddYear(double mjd, int year); ]8 w8 e! \6 u5 [4 U& i0 ]7 a
  612. {
    / O! P- Y3 R2 o0 a7 k
  613.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
    + Y6 p8 K% t# H. b+ |2 G! D
  614. " m* u. H! ^% X! \0 O
  615.   date = GregorianCalendarDateAddYear(date, year);
    2 v7 A0 s/ |  |+ o# Z! ?

  616. % ^5 n! C* G; r: e4 V" @& k" |
  617.   return GregorianCalendarDateToModifiedJulianDate(date);, o7 a/ R. {; w2 f8 V+ W% w
  618. }
    + j( ^. l( q' O- C/ G
  619. 6 V) I7 J, B0 H; b2 p4 W
  620. /****************************************************************
    8 n& k. e1 f8 p; n1 h  P$ P; N8 |/ ]. R
  621. * Function:    ModifiedJulianDateAddMonth
    ' M9 E% V0 r+ ~8 Q# L: U: w' N2 w/ w
  622. * Description: Modified julian date add month.: z1 X5 d9 n/ D% |
  623. * Input:       mjd:   Modified julian date.) }3 f* m, G5 O7 E3 c/ H& J  U
  624. *              month: The number of month to add.
    8 B( D. K; A/ c) F/ a0 `  z
  625. * Output:# y* P9 c- K- B: r" E
  626. * Return:      Modified julian date.' n$ i# x1 o( i: ?
  627. *****************************************************************/
    / |+ _1 Y+ E# o# Q2 ]  G( S8 Z9 Z
  628. double ModifiedJulianDateAddMonth(double mjd, int month)
    % t& |, \. [+ z9 K4 Z) y8 B
  629. {
    ! O1 Z% `: b* B
  630.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);% [# L6 ~, p# I+ a: L2 `' q" O
  631. ! Q+ i; f$ b& y2 z1 ?
  632.   date = GregorianCalendarDateAddMonth(date, month);
    & Z% H2 D( }' d) |5 L" q

  633. - {; e. r% u" L( D1 w( t
  634.   return GregorianCalendarDateToModifiedJulianDate(date);
    ) ?/ a' }4 J3 ~
  635. }
    / P, u6 R4 D& C2 o3 Y9 {
  636. / V* L: i$ B2 v- Z# I# t) y( S
  637. /****************************************************************" U: y" N2 \. i
  638. * Function:    ModifiedJulianDateAddWeek
    5 C" g/ c/ F% Z7 r: O
  639. * Description: Modified julian date add week.
    + a* X* e- H' u: x! G6 \
  640. * Input:       mjd:  Modified julian date.
    & f' E8 L1 U* Y. x+ m) N+ S
  641. *              week: The number of week to add.$ e1 W( H* w  F6 z7 J# G+ K0 F
  642. * Output:6 m9 r- o' K: O7 U: _# N
  643. * Return:      Modified julian date.
    " l" C; }* p2 R6 K" P
  644. *****************************************************************/7 @5 h' x$ x2 D
  645. double ModifiedJulianDateAddWeek(double mjd, int week)
    & I  h5 S0 n# e' {. b
  646. {% Q3 P. r/ l1 e- O2 U5 Y
  647.   mjd += week * 7.0;
    * ?+ r! C, e5 y5 v1 w/ ^: b9 V

  648. 2 x. K8 {. ~( s; i3 E. x+ Y
  649.   return mjd;( _) ~( y  a" A- g7 O% ]
  650. }7 R9 g5 E; W3 B7 j% ^0 g
  651. . Q( B" |  D1 R
  652. /****************************************************************5 u0 G& y" t4 S
  653. * Function:    ModifiedJulianDateAddDay
    % ?' {& b# j7 e( t, n. x0 A
  654. * Description: Modified julian date add day.0 b; O+ L- U3 B+ R% d
  655. * Input:       mjd: Modified julian date.
    6 |8 y9 Y' \$ M7 n% v( @- A
  656. *              day: The number of day to add.
    0 o' Y" Y/ Z! V$ i
  657. * Output:/ v! J( t& u" R! P+ I' z
  658. * Return:      Modified julian date.
    1 z6 K3 V9 P# o0 I* O% m, N
  659. *****************************************************************/
    " ^2 q% c! \/ c1 h) w- {" u# ], }6 d4 q
  660. double ModifiedJulianDateAddDay(double mjd, int day)  z9 x' U/ X  q. I8 t
  661. {
    3 _' A" a* t) T3 |5 \- q
  662.   mjd += day;
    . R( m5 K" Z6 w' f0 @
  663. % r  h# d* l# Y" t' }
  664.   return mjd;3 }6 O- r. J; N8 \# U7 `
  665. }- ]9 v) w0 q1 H8 i! o3 p+ Q

  666. 2 R" t, F2 w" u
  667. /****************************************************************+ i9 s% D- b/ @
  668. * Function:    ModifiedJulianDateAddHour
    : m) Q: A0 [) W4 x$ k
  669. * Description: Modified julian date add hour.7 o. z7 t+ ^0 F' @9 \1 \) ~
  670. * Input:       mjd:  Modified julian date.  L, o0 x  c0 L7 u4 w$ `5 {% B3 j
  671. *              hour: The number of hour to add.
    6 H! [" Y0 g$ }% S/ o
  672. * Output:( r$ P( e5 U. u+ r  _
  673. * Return:      Modified julian date.
    5 L1 A' {' m+ m$ v: q$ ?/ [; y
  674. *****************************************************************/
      s- e5 B3 X$ I( Y, O
  675. double ModifiedJulianDateAddHour(double mjd, int hour)
    0 Y  j! D: ]1 c' F) }
  676. {
    # \' n) B/ F$ G# D! J. {+ n. x# [
  677.   mjd += hour / 24.0;
    2 S& `" d. j; B: }, E1 Y: P& C

  678. " w4 n1 X. _; C5 q2 @) f. [8 d! w
  679.   return mjd;
    / Q  M! A( g$ i0 G
  680. }
    - d6 T* f: F6 e/ S4 V

  681. 9 q7 G8 l1 ~! |" G* y2 {, V* X6 t
  682. /****************************************************************
    1 [, O2 m- w1 }
  683. * Function:    ModifiedJulianDateAddMinute" c! O6 }8 X+ P6 t* L
  684. * Description: Modified julian date add minute.1 j' I( s7 K& }( T
  685. * Input:       mjd:    Modified julian date.
    + [+ a4 u( B/ D4 T5 T6 }% P
  686. *              minute: The number of minute to add.
    9 A; W0 m9 A( w$ v$ U- D
  687. * Output:
      L1 [% O: V# T3 a) K
  688. * Return:      Modified julian date.
    ; {7 G4 L4 F, x# l1 q
  689. *****************************************************************/( Q; `" o3 R1 @- P+ x' r/ q0 o2 \
  690. double ModifiedJulianDateAddMinute(double mjd, int minute)- m  x. B3 ~2 A/ m0 q  H- L; ^" L
  691. {4 G2 y4 |  q, e$ |7 l
  692.   mjd += minute / 1440.0;
    ; }& O% I  E& ~* n
  693. 4 ^5 J" ~0 k% }6 \) o2 I1 U
  694.   return mjd;
    & _' X* _& U( Z8 _
  695. }
    % i- m9 c/ O/ m
  696. 0 T9 i: J8 D" W) Q2 {
  697. /****************************************************************$ M# ?6 }- I7 _+ I! e8 v
  698. * Function:    ModifiedJulianDateAddSecond( z# n* j( J* Y
  699. * Description: Modified julian date add second.+ `9 ?0 @: H6 n- @" l1 W2 z, o
  700. * Input:       mjd:    Modified julian date.
    6 C/ X6 E6 N3 |% l$ V
  701. *              second: The number of second to add.
    + f5 i7 s: t: t% n% @6 d3 n, m
  702. * Output:
    : o- I- A3 Z8 D7 w  V! c
  703. * Return:      Modified julian date.
      Q- U( q+ P; _5 R" j2 L* R
  704. *****************************************************************/
    & ?2 q2 }; c" {, E7 H3 H& r0 k
  705. double ModifiedJulianDateAddSecond(double mjd, int second)
    2 V/ H7 n: ?6 ^# n0 r
  706. {
    + t) O7 O% N$ ]) x) E
  707.   mjd += second / 86400.0;$ l# K1 E. }8 c, I3 }' m' ~

  708. % u3 v$ I3 Z) d: b* r( Y5 |4 G* M7 g# @
  709.   return mjd;
    " L, d8 X6 j6 ?9 |4 E: w3 P
  710. }
    ! L8 M7 c# l% ?0 H1 P/ f

  711. ' p- R/ t. }: x
  712. /****************************************************************
    ( k8 z0 h; s: a: J1 @6 R
  713. * Function:    ModifiedJulianDateToGregorianCalendarDate7 |+ \: x; l+ A! [  C% K3 a( p
  714. * Description: Modified julian date to gregorian calendar date.
    / m% ?( Y) f/ j: I9 @  p
  715. * Input:       mjd: Modified julian date.
    : Q1 P2 `3 S7 e/ H, Y. w
  716. * Output:
    * V" h; v: w0 }: @% H: D
  717. * Return:      Gregorian calendar date.; D5 ~) ?2 c3 H
  718. *****************************************************************/* t5 G, K+ M. S1 V! k' h
  719. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd)
    2 C; L# n3 q4 ^
  720. {" L: s* A0 i5 I
  721.   return JulianDateToGregorianCalendarDate(mjd + 2400000.5);
    1 P3 Q6 [' s4 O& F4 a
  722. }
    ( E" B0 H/ U* x

  723. : M  }" r7 n' s- L# B, \8 L
  724. /****************************************************************1 R  |) ?0 p) [3 F7 M2 ~
  725. * Function:    ModifiedJulianDateToGpsWeekSecond- Z8 s: _, N% F7 z
  726. * Description: Modified julian date to gps week and second.
    9 V( x6 Z% H8 U, x4 D" v
  727. * Input:       mjd: Modified julian date." q7 ?5 {% Z0 \0 U( w; A- A
  728. * Output:
    , e' ^2 f5 r$ k
  729. * Return:      Gps week and second.+ {0 x" D9 o: O8 J
  730. *****************************************************************/2 F8 x+ \0 [7 L, k
  731. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd)" D& b( C3 ~! `& I$ f+ z. R
  732. {: }' p& ~! [3 w( B0 x
  733.   return JulianDateToGpsWeekSecond(mjd + 2400000.5);9 f, b' r( c1 J! f" B' L
  734. }
    8 S% L6 Y) N9 P7 d2 |3 o7 k- M
  735. 7 `9 j3 e& j- b8 P9 F
  736. /****************************************************************
    3 U1 g" K1 C; T
  737. * Function:    ModifiedJulianDateToJulianDate
    9 G- K1 o- w7 f' P
  738. * Description: Modified julian date to julian date.
    ! [, z3 t6 v9 X  [
  739. * Input:       mjd: Modified julian date.
    0 m, F9 x( z% m$ s
  740. * Output:
    $ v  c8 T! z5 O0 i
  741. * Return:      Julian date.
    , I- X! K- `. ]
  742. *****************************************************************/
    / E  R8 R( D* @' a) N8 k
  743. double ModifiedJulianDateToJulianDate(double mjd)0 t2 R/ _! C9 [- T
  744. {
    8 Y+ \; S: o& J3 l
  745.   double jd = mjd + 2400000.5;
      _. }2 i5 J  ~5 i1 M0 h! W1 ]. ?$ r
  746. , T; p& v, [, t( j3 [9 ~
  747.   return jd;
    6 e' O2 w3 `6 x: D+ y, |: T; d
  748. }
    2 q9 |' J/ s  P
复制代码

# @5 C$ a! {- m      main.c文件
% _* S7 |2 e" C- H
  1. /****************************************************************
    ( k4 w/ B7 A7 x7 x7 g, O
  2. * Copyright (C) 2017, XinLi, all right reserved.
    8 S, H3 @- F5 w6 ~& D* _
  3. * File name:    main.c
    ! F7 Q" l' U+ ^3 {, K4 N% V# |
  4. * Date:         2017.10.17
    * m+ u6 W! {* w: T9 L% M' U: k
  5. * Description:  GPS, UTC and local time displays." F  X7 i) ]3 b% _' c. h4 g
  6. *****************************************************************/+ }5 N+ a: f( K: r

  7. . g+ l& {3 h# R* Z
  8. /****************************************************************
    % m7 _6 j! ~5 `( y2 [
  9. *                        Header include
    ( P  T" ]* o9 V0 S% u
  10. *****************************************************************/
    ! S  N2 ?- B- ~, i1 Z3 a& E
  11. #include "DateTime.h"
    4 p* q  ]6 n( P+ |
  12. #include <stdint.h>8 J7 ^9 [% K& Z6 A, G; t3 m7 P( l/ C
  13. #include <stdio.h>
    ) q1 ?7 e* f* p7 A' ]! o; Z
  14. #include <time.h>
      N# B( C0 Q' B$ y2 h0 q
  15. #include <windows.h>& j$ f4 Y9 s7 U( Y- r! X

  16. / b* [5 w$ R8 O' {  V% p* X( O+ }
  17. /****************************************************************
      T. K% G" V$ C0 F6 N1 ^/ l) \
  18. *                       Global variables5 z2 g- X- ^- K# W* d
  19. *****************************************************************/' w* q4 q1 Z2 u: C# H% a: N9 h

  20. : i0 c) M5 O% Y8 A' g! U

  21. ( j! `# ?& b/ }+ d& Q- u
  22. /****************************************************************
    5 P2 b& g0 k; W% h2 {9 y9 O# p$ ~0 r
  23. *                     Function declaration1 n1 G9 D, h2 `1 |) a
  24. *****************************************************************/
    ! P' k; x! C; D- x  z% w
  25. static void gotoxy(int x, int y);
    ! U: x8 O2 B( z  V, X
  26. 7 E5 x2 R4 [& w8 m
  27. /****************************************************************" N0 ]" f0 Z+ X; G
  28. *                     Function definition6 t8 z0 N$ G; B% J1 u( f
  29. *****************************************************************/
    9 t. o2 w& Y% w/ r$ g& N
  30. * p, P* j' ~" |7 Q* s7 G, ]
  31. /****************************************************************
    0 b' s: r: S( f
  32. * Function:    main6 P  P. T$ G6 o2 Z4 f. D! P" ~
  33. * Description: Program entry.; N7 o6 b# D% c9 ^  r! ^* g+ v
  34. * Input:
    ( Y, \1 T" L3 ~5 v  P# \
  35. * Output:
    7 i: E: i) Z% O, a" n* x- @% L
  36. * Return:
    ! |9 |0 J* V; Y6 {
  37. *****************************************************************/2 Q7 o! [9 z& J. [3 ~
  38. int main(void)% U$ K& j! z4 ]3 t
  39. {( G! v3 U. L: J! N# Y
  40.   for(;;)1 |; a  M" Q4 T
  41.   {2 X% l( y1 ?# G4 p" ^
  42.     time_t        times     = 0;
    % e0 O4 i0 B: w' l+ ]: N, i
  43.     double        mjd       = 0.0;  z1 C. n1 u" E8 J7 h7 N
  44.     DateTime      utctime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};) l+ I; u3 f8 [' _4 C3 [, L' T8 H2 f
  45.     DateTime      localtime = {.year = 1970, .month = 1, .day = 1, .hour = 8, .minute = 0, .second = 0};# f' }) Y. J( \; |% o& o
  46.     DateTime      gpstime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};
    $ V, {& r; w/ X, I9 {5 @
  47.     GpsWeekSecond gpstimews = {0};! G! D  z+ ^3 G3 s8 I

  48. ( k+ N/ [# }) W9 {1 w, f+ D6 h
  49.     time(×);
    $ ]3 l# a0 M9 b8 Z& l  K$ `4 F. m' }

  50. 3 O9 w% o5 g0 D) X/ ^5 j3 s
  51.     if(times > INT32_MAX)2 N0 j% X  q) p6 X  A
  52.     {8 o4 x0 S: n( S  W* p0 J+ [/ u- ?
  53.       utctime = GregorianCalendarDateAddSecond(utctime, INT32_MAX);
    . U: ?, ^! ^4 n% e  E% K0 q
  54.       utctime = GregorianCalendarDateAddSecond(utctime, (int)(times - INT32_MAX));
    " ?$ H+ p% U( U1 W2 S
  55.     }. J! b4 r" I$ L$ z' `3 e7 J# u
  56.     else3 A4 [' y% P/ E  `6 r
  57.     {
    # B- V/ `- p5 ~/ Y1 a. H# U
  58.       utctime = GregorianCalendarDateAddSecond(utctime, (int)times);
    ' Y/ ]1 _& J9 e% s6 K2 q) s
  59.     }& {- t' {9 ^. k) X' B
  60. 4 M* X$ ~; |9 h& D5 g
  61.     mjd       = GregorianCalendarDateToModifiedJulianDate(utctime);
      H: t4 ?1 @$ J8 x9 R, z
  62.     localtime = GregorianCalendarDateAddHour(utctime, 8);
    ' ]; A6 m) C+ I( M
  63.     gpstime   = GregorianCalendarDateAddSecond(utctime, 18);! V6 C% I. x/ w0 E2 d: X
  64.     gpstimews = GregorianCalendarDateToGpsWeekSecond(gpstime);( T6 f. i% K- b0 i* G
  65.   v6 Q& g3 z: O
  66.     gotoxy(0, 0);
    - g& W6 c6 j  A( d: F6 ^% t2 ^

  67. " p0 K5 F7 W* q+ U4 M
  68.     printf("Local | %d-%.2d-%.2d %.2d:%.2d:%.2d | timezone UTC+8\n",/ O7 F% L4 ]9 m5 Z" Z
  69.            localtime.year, localtime.month, localtime.day,
    : E  H' S5 }( k" }
  70.            localtime.hour, localtime.minute, localtime.second);
    5 C) A7 k% w1 X9 b

  71. 6 I, z; V0 k0 _" z
  72.     printf("UTC   | %d-%.2d-%.2d %.2d:%.2d:%.2d | MJD %.5f\n",9 E& x8 K, Y) D! O3 c% e1 ~
  73.            utctime.year, utctime.month, utctime.day,& d! z; {& F! J4 e: y  a" q
  74.            utctime.hour, utctime.minute, utctime.second,+ ]- S( J4 J0 ]. E$ L$ I5 f7 u* @
  75.            mjd);0 K! d1 Z! O) j

  76. ! |. c" F3 @  @- t$ t
  77.     printf("GPS   | %d-%.2d-%.2d %.2d:%.2d:%.2d | week %d %d s\n",' Z  q7 p& {; Z0 f3 G/ i0 h, L; @
  78.            gpstime.year, gpstime.month, gpstime.day,9 d; i" X; I7 {. j5 P7 F
  79.            gpstime.hour, gpstime.minute, gpstime.second,0 z5 ]6 P; X- Y
  80.            gpstimews.week, gpstimews.second);
    & P. k% X- x9 a

  81. . m: u; G: @1 ^% K$ R9 _
  82.     Sleep(100);
    9 i. Z$ W: }- H6 D
  83.   }( |  b& ]6 m" ^
  84. }
    4 a% J# g5 z/ x% o  H9 Q+ M4 ~

  85. % A( w/ r% G  @3 E& o4 n% W+ Y
  86. /****************************************************************; i" B9 T6 r/ Q* t2 f0 U
  87. * Function:    gotoxy
    0 |, R$ ~8 c1 J) q+ I) f
  88. * Description: Move the cursor to the specified position on the text screen.
    / K5 B% M' R- L2 `8 s6 S" v
  89. * Input:       x: X axis coordinates.
    0 k/ @) b# H, Y8 }; m9 j
  90. *              y: Y axis coordinates./ F3 M% H+ Z( J; x# M9 w
  91. * Output:* u) E: [4 z% s* w% T
  92. * Return:
    ' a9 T/ n3 `  ?- Z& j
  93. *****************************************************************/$ j. I# f% J% F. N7 V
  94. static void gotoxy(int x, int y)0 V2 P$ e5 Q0 j, c3 }
  95. {
    0 K) d5 E* X7 h1 y6 z5 S( K4 ^
  96.   COORD  pos  = {x, y};% H6 z# `( s* A2 G0 g- @  u6 f
  97.   HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    0 {: _& m2 y) _
  98.   SetConsoleCursorPosition(hOut, pos);  H& b6 [% e! Q2 n4 u
  99. }
    3 V1 f. D6 \( e
复制代码

0 t% I- h2 V& ?' J0 a. ^3,运行效果
1 N' c, K+ W2 F4 p+ i) }
RunningResult.jpg 6 e( J4 n: |$ W9 e
! j. l; z' ~* r; Z1 Q7 H
收藏 评论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 手机版