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

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

[复制链接]
XinLiYF 发布时间:2018-2-2 21:41
GPS,UTC和本地时间的显示器+ L+ u( L  y# {4 w& E- @! k
% |3 B) m% \8 v" u5 Q; V
转载来源:GPS,UTC和本地时间的显示器% I! q  T, E4 N/ ^# g  H, P

( u/ X; h% X8 E9 XGitHub仓库:http://github.com/XinLiGitHub/GpsUtcAndLocalTime
4 D! q) p, ]1 IPS:博文不再更新,后续更新会在GitHub仓库进行。
: }2 f/ }* g* J  K# ^4 j+ |1 u4 P8 U
' e% a# S5 e) M) r- L6 A      GPS,UTC和本地时间的显示器。程序中涉及到朱利安日期的转换,详细介绍见维基百科[Julian day](http://en.wikipedia.org/wiki/Julian_day)。$ p; x" u0 |" ?4 P2 h# P  r5 S1 E3 G

& g( f" q$ w) x! M  g1,开发环境
; P0 ^) g! g( [      1,操作系统:Windows 10 专业版
, R( E/ d, N$ L8 Q* X      2,IDE:Visual Studio 2015 专业版
" D1 y3 m4 t0 k; G4 x+ E8 A0 D1 E% ]7 Q/ z
2,程序源码
! V5 L; m  m$ M      DateTime.h文件
6 T; W7 E" _' f7 v
8 y4 b  G/ q: ^( G
  1. /****************************************************************1 ]0 [4 K0 h; U3 r2 s: A
  2. * Copyright (C) 2017, XinLi, all right reserved.% Q" V% @+ U: }9 O; ~) ~' u1 ]& R
  3. * File name:    DateTime.h
    6 ?& a: l' W- J9 E0 f
  4. * Date:         2017.10.17- r7 H) B6 q8 C( I! J% k7 O! u
  5. * Description:  Date and time module header file.
    + ?7 @" V" R8 B
  6. *****************************************************************/) d" G% h3 o, Y, R+ b& I
  7. 5 G( H8 m: E3 O3 B# J. m4 U( x
  8. #ifndef __DATETIME_H
    $ t! a% Z8 Q/ j( w% i
  9. #define __DATETIME_H- }7 C/ I( o" N/ A, `0 A. `( k9 H1 X
  10. % [. a" `  J4 g; y) \; W( v
  11. /****************************************************************2 L, B7 i( T# ]2 r& W! o1 V
  12. *                        Header include
    9 A; J" l  q& m$ @1 M  l( I  k8 {
  13. *****************************************************************/% F9 v4 y% g0 n# n8 [9 z4 |

  14. * [" B( u; A' P1 A0 V: H0 U& ~: ^* `
  15. % x1 T! W+ s1 W" e
  16. /****************************************************************- C+ F3 f8 ~$ h$ T, w6 K( r
  17. *                       Macro definition
    / |& v; ~; t$ R  d2 A
  18. *****************************************************************/
    ! E4 |4 x! F% ^

  19. % T" y$ o2 c# @, a8 f* ~2 p0 N# B
  20. 1 M% P/ ~3 O- V" ~& w
  21. /****************************************************************
    / V$ z5 X9 q* q/ S
  22. *                       Type definition' U  `' l+ s( e$ c( a+ v) F* s
  23. *****************************************************************/
    ' d# w- a& \; I2 R
  24. 3 y  `6 n$ U7 `6 o4 }2 f

  25. % z; B& G( A! f2 R0 s' E! M
  26. /****************************************************************5 w  G& [' J' B, S- W
  27. *                     Structure definition5 \; y, C: I; T9 p( A% a
  28. *****************************************************************/
    6 V# @9 {+ k7 h$ a
  29. typedef struct9 E) j. ^5 x" J6 U  c: f- K
  30. {) S& _, M; W7 f" n' Z
  31.   int year;
    4 N6 D% b" c$ v
  32.   int month;: n/ s; c) Y, j/ X9 T9 \; N+ D0 k
  33.   int day;
    / x6 Z3 [; p: D/ ]1 L2 s
  34.   int hour;
    2 V$ X$ d0 O9 Q! j5 \, N$ V
  35.   int minute;
    ! h8 h7 t: `  ]1 X/ T# G+ w
  36.   int second;
    2 H: K9 m; c0 {$ O) B
  37. }DateTime;
    : z, ~3 Y+ x- x

  38. ' Z# M  ^) n! Z9 |* t
  39. typedef struct
    5 d4 Q# `2 F' k" A7 W& X
  40. {
    + `  r- X) |; @' Q$ L
  41.   int week;
    ( l/ M- x4 _' e4 G
  42.   int second;9 Y7 Z4 r' A1 m
  43. }GpsWeekSecond;
    ) }7 r* \$ j+ J5 v5 S

  44. 2 @- M6 Z0 O; o5 Z0 M2 H6 H

  45. " B1 y8 V# |* R- m, M' g
  46. #ifdef __cplusplus: H5 ]! S7 P' h6 K9 B1 ~# x( \
  47. extern "C" {( Z7 a7 V5 J- W7 Z4 t- r" X
  48. #endif  /* __cplusplus */* c" N' A% [2 g; ?

  49. 9 n$ T; q# e5 Z
  50. /****************************************************************
    " S9 k7 V/ r" h' L+ c% n
  51. *                     Variable declaration4 e1 F/ f3 y! u0 V& y
  52. *****************************************************************/
    ( V3 ~( g. j! M* B+ s
  53. 6 e( T% X' ~0 u1 \. |& N
  54. * _. w: t1 R3 |. o; X. _' v- ?# ~
  55. /****************************************************************
      X% p3 p' |8 s  {) ?! a" ^
  56. *                     Function declaration% W9 K0 a: z" F4 B3 F
  57. *****************************************************************/9 b# c/ @3 x# D% F* }+ Y" Z
  58. DateTime GregorianCalendarDateAddYear(DateTime time, int year);1 {  y+ I$ r6 U# S0 W. }
  59. DateTime GregorianCalendarDateAddMonth(DateTime time, int month);3 g$ V2 V. x2 q' P* @, I# n
  60. DateTime GregorianCalendarDateAddWeek(DateTime time, int week);
    - n' j6 N; i0 w/ i4 k  N
  61. DateTime GregorianCalendarDateAddDay(DateTime time, int day);
    4 ^; f  E/ a/ k1 Y, }
  62. DateTime GregorianCalendarDateAddHour(DateTime time, int hour);
    " |% o: e; P! {2 Y' Q0 c1 M* C, P1 @
  63. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute);5 D$ W+ }& a8 N% Q1 W2 G
  64. DateTime GregorianCalendarDateAddSecond(DateTime time, int second);
    , y9 K0 U$ o5 X$ o9 D/ }- b
  65. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time);/ c! }2 u. X) k( z7 W
  66. double GregorianCalendarDateToJulianDate(DateTime time);
    , o4 O" p6 G6 X' k7 y! K0 D
  67. double GregorianCalendarDateToModifiedJulianDate(DateTime time);  x, |+ D4 D2 K4 J4 z1 q( P: i
  68. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year);: k1 e& N/ U' K
  69. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month);2 v7 @6 x9 C( K% t& P9 C/ b1 X
  70. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week);
    % l7 e1 t: p* Q+ H
  71. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day);
    3 W7 |. |* E2 b% Z( l7 I6 O
  72. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour);- C' M) u$ @8 @. \( R
  73. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute);
    9 ?* s; M9 Q, _7 j+ g; K9 V
  74. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second);
    : d% ]- {0 R/ U/ i8 G
  75. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time);+ M2 \; t9 Z2 Z- X* G
  76. double GpsWeekSecondToJulianDate(GpsWeekSecond time);' J6 r6 X' w) a& u- ~$ S6 q3 O3 v
  77. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time);6 B" R! O  l0 I0 H: E1 q
  78. double JulianDateAddYear(double jd, int year);" B7 V- Z: \; w( _% f6 G! a: ~) o+ V& V
  79. double JulianDateAddMonth(double jd, int month);& C- h8 X- l: s$ X2 h- r
  80. double JulianDateAddWeek(double jd, int week);
    & S. N/ R; d8 W3 U
  81. double JulianDateAddDay(double jd, int day);
    0 U/ S% u5 N9 ^, _
  82. double JulianDateAddHour(double jd, int hour);
    4 l, s1 E& u0 k/ {$ q# f* o* m" e
  83. double JulianDateAddMinute(double jd, int minute);
    6 m3 m4 |1 }( N& ~" k
  84. double JulianDateAddSecond(double jd, int second);
    0 j& Z5 u3 m; T
  85. DateTime JulianDateToGregorianCalendarDate(double jd);
    . U$ v: e/ P* ^0 r3 G
  86. GpsWeekSecond JulianDateToGpsWeekSecond(double jd);
    9 s3 X1 W2 W. f4 p# {. l
  87. double JulianDateToModifiedJulianDate(double jd);( Y$ v8 d; U& G) q( W( w
  88. double ModifiedJulianDateAddYear(double mjd, int year);- y* H+ P  C* X3 @
  89. double ModifiedJulianDateAddMonth(double mjd, int month);
    9 E( X& ^7 b; R+ s% E( a( _
  90. double ModifiedJulianDateAddWeek(double mjd, int week);) u2 G9 c! L! M  m
  91. double ModifiedJulianDateAddDay(double mjd, int day);' L' ]8 E( M; I0 l$ j* \
  92. double ModifiedJulianDateAddHour(double mjd, int hour);
    $ v6 a. G$ w9 A; h1 F3 {
  93. double ModifiedJulianDateAddMinute(double mjd, int minute);- d2 t3 _7 B' ]4 d, V" I$ F
  94. double ModifiedJulianDateAddSecond(double mjd, int second);% f; D8 z# [/ T3 c. i4 E' M
  95. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd);1 H$ i' l* @) I
  96. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd);
    & }8 R# @0 X2 K  a$ c- V0 `, i+ ?
  97. double ModifiedJulianDateToJulianDate(double mjd);
    , n6 j$ f9 T4 h7 r8 ~
  98. / [9 `3 s8 z$ a  H" A9 y
  99. #ifdef __cplusplus3 W* J6 O% j4 D! R3 h' O
  100. }
    & r; t; `" U1 F& B! K2 _2 x
  101. #endif  /* __cplusplus */
    1 z3 y4 ]8 A  w# y# i% v; p8 }

  102. 8 {1 j7 t6 M0 Q1 @) x& b& S5 V
  103. #endif  /* __DATETIME_H */
    . e9 f5 g# B  Y0 o7 ?4 V: [8 P* V+ V
复制代码

, @1 \$ ]7 v# b* Z0 Q# m      DateTime.c文件
8 t$ u( [) V" o* C7 |
  1. /****************************************************************
    + r1 R( }) U7 K' S1 y5 ?3 B
  2. * Copyright (C) 2017, XinLi, all right reserved.$ y( q" m  a" ?( o
  3. * File name:    DateTime.c# \  _; N( b- s" x. j4 d
  4. * Date:         2017.10.178 f0 [0 e. D/ e1 F7 p: ^8 F2 u
  5. * Description:  Date and time module source file.1 ~8 _6 s( j% E8 n/ D
  6. *****************************************************************/3 v& B8 y) r8 L: ]. o* ^  y

  7. 0 n6 B1 X1 r0 D5 Q% g
  8. /****************************************************************4 \5 \! z7 L' W7 Y
  9. *                        Header include' d$ ?/ e$ s. M' _
  10. *****************************************************************/8 M+ D# T! M. c& L9 |
  11. #include "DateTime.h"! x# [, o0 j* p* C& t' R
  12. 1 s2 W. d4 r$ N; u
  13. /****************************************************************6 v9 f% u$ W' J" @* g
  14. *                       Global variables
      C! J4 F% a  d3 A5 t$ _
  15. *****************************************************************/
    + i: N! N4 J0 D, ?! M6 Z
  16. ; w# V# G( P! `% Q4 o

  17. 2 X. c  b2 Q$ ?" C1 v! v
  18. /****************************************************************
    5 n" g8 v& \8 |+ }
  19. *                     Function declaration$ E$ t* J! p1 q1 Z$ P
  20. *****************************************************************/
    + c! x( |9 K9 J0 s. ^( ]" m* P, K  i  o( q
  21. / e- s% S( L. r

  22. + D$ H# y8 d& y5 M/ Z6 @+ P
  23. /****************************************************************8 K% Z. Y) \  B. D5 u
  24. *                     Function definition
    - @; {6 l' s* ?+ U
  25. *****************************************************************// b5 s, D1 N- ]8 z2 L! l/ k' z

  26. ) f; z" y6 X8 O% E0 L" t; g' S$ O
  27. /****************************************************************
    ' A- |1 A# K$ e  t6 N
  28. * Function:    GregorianCalendarDateAddYear5 [/ |( _0 ?6 {; U, u; ?1 q
  29. * Description: Gregorian calendar date add year.
      I  L9 g, h5 c) ~
  30. * Input:       time: Gregorian calendar date.
    ' D, l3 ?4 w7 b: l/ o- A
  31. *              year: The number of year to add.; N( v" s! _! I( L( c
  32. * Output:
    5 w4 M+ H: W' [) o4 }* A
  33. * Return:      Gregorian calendar date.
    0 k. N- |# m! L& d8 I  z1 c
  34. *****************************************************************/
    " s: @' j2 P" q2 f0 m+ X% y
  35. DateTime GregorianCalendarDateAddYear(DateTime time, int year)
    0 e6 [7 j7 C* A3 w
  36. {
    ' T1 W4 h2 t& l4 z. e3 G. I
  37.   time.year += year;; r' k, J. P2 U

  38. ; `8 B" o; t# i. p8 F# Q
  39.   if(time.month == 2)
    ; }/ ^; H  t, b( B4 A, z% N1 H( c
  40.   {
    $ c. `' O6 B& W6 n' k% B9 k1 d
  41.     int mday = 0;. g* X1 `) V: N/ x+ D
  42. & N; {0 E; y; o( r( x/ [
  43.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))
    " }% d9 B: U$ p! m, s
  44.     {
    2 M! S& a  {; s. Q" W+ Y/ p
  45.       mday = 29;
    + g8 a* w# c/ Z8 G
  46.     }5 ]" l3 l) f! ^, u) y
  47.     else7 j& U8 o: e, g* s9 }9 {+ y, Y
  48.     {
    ; Z" G- F, L2 d5 C) b9 a
  49.       mday = 28;+ A% H& J6 z; m7 k
  50.     }1 r/ G' ?4 l: I6 A0 [5 v0 I8 l5 X& z

  51. 8 L( ~( ~- }7 C; x% ~' j. T
  52.     if(time.day > mday)  L/ x- U1 ]% J4 I& z" \
  53.     {
    ' N; T2 E9 G3 H7 k+ B
  54.       time.month += 1;9 T. q5 S8 I4 s
  55.       time.day   -= mday;& ?, g+ o5 e2 S1 O
  56.     }/ e6 a8 T% }. y. s: \* g) i
  57.   }
    ( O% B) h5 x* C& j. E. U# D; u
  58. ( `* R8 W* \8 ?  B9 @9 L% f) j
  59.   return time;. M( n8 F! a) v
  60. }* A( H$ e5 h/ M8 X! A

  61. ' T/ T$ M, k; k0 @8 ]9 E# e
  62. /****************************************************************+ S( e+ h9 r. v3 ]5 d. r
  63. * Function:    GregorianCalendarDateAddMonth
    * U) m4 j: P1 f3 h3 B2 c1 G
  64. * Description: Gregorian calendar date add month.  z% v- h1 x. s) S( D$ t1 A
  65. * Input:       time:  Gregorian calendar date.
    6 ], E4 f. e8 ?6 ~' E; i
  66. *              month: The number of month to add.
    4 h4 a- {! d' f* m
  67. * Output:% V. Z9 c* v# i% }  _+ ~' e  J
  68. * Return:      Gregorian calendar date.6 F( e9 y8 M+ Y) u
  69. *****************************************************************/
    , f4 \7 x9 F+ O+ y3 m
  70. DateTime GregorianCalendarDateAddMonth(DateTime time, int month)
      k/ d# z* k* T7 U% W
  71. {! E6 C3 Y5 d' D: r7 b- C! L
  72.   time.year  += month / 12;
    & w1 J4 B8 u5 C* s' ]1 A' X2 P9 x
  73.   time.month += month % 12;& X: m$ N( a4 w
  74. % f# _' ^, H* A
  75.   if(time.month > 12)' Y$ C+ \% t. U  n; {
  76.   {4 L( h3 @- `2 c1 J
  77.     time.year  += 1;
    0 m0 s* x1 `, I- k
  78.     time.month -= 12;
    / B6 N5 X9 R$ f* A1 s1 Z. Z
  79.   }4 Z9 \: g  x; t7 q4 ~

  80. . \! u  ]% t8 H/ t
  81.   int mday = 0;
    # U: P, q5 R6 O2 o& Y# W/ @% n7 z
  82. * c. c& A0 n4 }2 ?7 }7 b  X
  83.   if((time.month == 1) || (time.month == 3) || (time.month == 5) || (time.month == 7) ||
    ( F! w4 j6 e. b& r7 R, w
  84.      (time.month == 8) || (time.month == 10) || (time.month == 12))
    + b5 U5 u( a6 b6 U4 B% Z& |
  85.   {1 J  F: ]# z0 r' u, Q# D
  86.     mday = 31;( w! C# t0 ]% S. s2 E
  87.   }
      O4 n  D. E# f6 k! l
  88.   else if((time.month == 4) || (time.month == 6) || (time.month == 9) || (time.month == 11))- A/ y  x8 y" v5 ]+ s2 a0 }
  89.   {
    - {( s+ ~- \) @
  90.     mday = 30;
    " o, d8 l0 J! B9 N
  91.   }
    : z1 v7 A1 o5 Y2 H: O+ C" g
  92.   else- o; }) C; F: `6 v4 L8 z7 C5 I/ B! |
  93.   {
    : V- e$ d, ^) ]& l/ ^+ [
  94.     if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))
    0 }3 q9 k* {) Z
  95.     {
    1 a3 w* M! M- @! B5 p: {' [
  96.       mday = 29;; l! B% l8 t- J* j& d0 ~- a  b' F7 B. k
  97.     }: R2 ?! M3 c8 L" m) r
  98.     else
    3 X! P4 e6 T: n& E! D2 Z* B5 l
  99.     {
    ! p( F5 k+ F4 r0 u( R5 }, w, G
  100.       mday = 28;% {4 [, \/ w4 G) L/ D3 _
  101.     }
    8 |4 j+ n1 a" Z
  102.   }
    6 ^: i0 f, e  ]& R& ]) b, O' o8 Z
  103. * e1 r3 t5 ~5 K+ v  a" |0 S
  104.   if(time.day > mday)8 O, y" A# E) ?5 A" ~4 g" s% k( \7 c
  105.   {
    ! v0 s0 R; X; |2 ]+ q
  106.     time.month += 1;1 ^: r2 V; I5 K6 }: P; _
  107.     time.day   -= mday;0 |+ h7 ?# A% F: Q# T  D) U
  108. & M( }0 ^  q6 |) P8 ]
  109.     if(time.month > 12)! a& R  S7 Z2 Y3 p' u: `
  110.     {
    0 t) i0 D) N3 z# G7 K" {( V4 p
  111.       time.year  += 1;! n; e5 E/ y4 |5 i% s
  112.       time.month -= 12;
    ! ]# m; `) _9 B
  113.     }3 [3 P  K9 e% [2 B- ]
  114.   }
    3 Z, }# n/ V  C) U: r$ x

  115. 1 h' K# l4 s4 `! W% N8 K& e" G
  116.   return time;
    3 b, r- Y9 E: z0 x$ P) w: ]/ S
  117. }2 j1 k! C0 p5 y  \2 f

  118. 4 B) }( ]5 f  \/ W, W. ^
  119. /****************************************************************0 C: f* \6 M  d/ P) X2 y
  120. * Function:    GregorianCalendarDateAddWeek
    ! x4 \/ p9 f0 T. j: K& |) l! I
  121. * Description: Gregorian calendar date add week.0 _5 I5 \, _5 D7 M
  122. * Input:       time: Gregorian calendar date.5 w2 Q3 j7 F* V2 K. i, I
  123. *              week: The number of week to add.
    . d' }4 H! f+ d. X  ^5 k. x0 i
  124. * Output:4 i2 W! Z$ `; G: e- X- b# b7 Y
  125. * Return:      Gregorian calendar date.
    # q* q* N$ P5 z1 j" E' A$ i
  126. *****************************************************************/2 V1 r# \( K7 i  v9 M
  127. DateTime GregorianCalendarDateAddWeek(DateTime time, int week)* e) I& `, U' d# m! U6 v
  128. {& F9 P2 h4 Z9 q5 O  }1 N& _
  129.   double jd = GregorianCalendarDateToJulianDate(time) + week * 7.0;4 X( ^3 Y* O+ @/ B$ K
  130. 8 x- m% P* L) y+ `) i, l) }# B/ S
  131.   return JulianDateToGregorianCalendarDate(jd);
    , u; f  _3 Y4 k" |" b! R
  132. }
    / u3 N8 m, f8 [) h. l
  133. 6 }. `$ K( b6 k" X( u
  134. /****************************************************************
    ) L7 @4 S* v7 A( K5 |+ C6 J
  135. * Function:    GregorianCalendarDateAddDay% s/ z. ~/ F0 x+ L6 A
  136. * Description: Gregorian calendar date add day.% q  z' Z. r% Z9 W7 m5 Q
  137. * Input:       time: Gregorian calendar date.
    # \' N4 d  h+ u8 o( ~
  138. *              day:  The number of day to add.
    4 }7 g( ?. O, i+ y) C. ]8 }1 s
  139. * Output:6 k! q& C( J7 }* o. W
  140. * Return:      Gregorian calendar date.5 e4 v$ A2 W9 v' m5 G2 A- C
  141. *****************************************************************/' k) }' F% n! T) F
  142. DateTime GregorianCalendarDateAddDay(DateTime time, int day)" O( X/ n2 O  _0 u
  143. {
    & E/ J6 \$ c& `& y8 Z+ B1 D0 ~
  144.   double jd = GregorianCalendarDateToJulianDate(time) + day;
    : ~& `- ^0 g# K. l4 ^. w
  145. 5 m/ k* N! g* o! A
  146.   return JulianDateToGregorianCalendarDate(jd);
    - Y- `7 T' q3 d5 Z
  147. }
    - X. C$ y* ~2 J/ V% I& p

  148. 2 H9 K9 s! E. M7 L* N
  149. /****************************************************************: h; S/ I, |1 _' s3 T
  150. * Function:    GregorianCalendarDateAddHour5 e: G# B5 C- q. R2 S3 K6 K6 _( ?: L( n
  151. * Description: Gregorian calendar date add hour.! C' j  D3 ]0 |6 i2 L
  152. * Input:       time: Gregorian calendar date.
    * E! E: O& ~2 a; n- J2 H% y
  153. *              hour: The number of hour to add.
    ! W* m. c  [6 E6 v7 F* I7 b2 i
  154. * Output:0 z% b- k2 C* J( R7 M
  155. * Return:      Gregorian calendar date.3 z) ?2 F7 N' r0 s3 m& p( y- ?" k. L' |
  156. *****************************************************************/
    3 b% \( Q. d9 c0 y3 K
  157. DateTime GregorianCalendarDateAddHour(DateTime time, int hour)
    9 F: u. y) G/ Q+ z6 J; r1 ~/ Z& V
  158. {' @! X6 }9 `/ W$ W
  159.   time.hour += hour;
    * {5 y8 p+ J+ f/ y+ H. f
  160. 1 C0 s, A) W, V( p% S0 u/ J9 L
  161.   double jd = GregorianCalendarDateToJulianDate(time);
    ! N5 U$ p: Y& X% \" r
  162. $ K2 E7 i% _, t& ~/ D3 c1 g) i3 i. v' t
  163.   return JulianDateToGregorianCalendarDate(jd);( N. c8 T; Q8 J1 {" ?$ p
  164. }
    & n7 M' j! n2 P( o) o) T5 G3 `* f

  165. # |! Y% P/ T1 H1 ^; \- U
  166. /****************************************************************
    8 a: c: r1 Y2 U- U8 G' B# J
  167. * Function:    GregorianCalendarDateAddMinute; }% R+ y" j, R% Y5 Z
  168. * Description: Gregorian calendar date add minute.- c( K( F7 W; L
  169. * Input:       time:   Gregorian calendar date.- v. i# ~; T7 f& p; H6 N
  170. *              minute: The number of minute to add.
    ! r# p1 {: _2 R( @# t2 m
  171. * Output:1 X  s0 d0 i$ ]' l7 i
  172. * Return:      Gregorian calendar date.8 U/ T, F* }7 y: s; Z( \3 Q: o
  173. *****************************************************************/3 X/ l6 A% X* Z; x% z. |* N
  174. DateTime GregorianCalendarDateAddMinute(DateTime time, int minute)  H: F; e5 x' ]! S) z0 |# s2 d
  175. {" ^6 u/ }  ?! b" y$ s0 t
  176.   time.minute += minute;
    6 H  A4 E* S# A, T( X
  177. 0 U. k' V+ [) _( ]' a& R. f) S5 L
  178.   double jd = GregorianCalendarDateToJulianDate(time);
    : H3 q' e4 ^. ?. F% S+ q
  179. % L  Q! i. S& Q/ q) U# X
  180.   return JulianDateToGregorianCalendarDate(jd);$ a$ j% U5 g/ ~3 K* y% C6 f0 y7 m0 d
  181. }0 a7 V" n) e, l% n& s3 z
  182. ) t* ?# B! ~, F$ Q% T# [# e. s
  183. /****************************************************************
    3 r) [5 c, O5 D; L& ^
  184. * Function:    GregorianCalendarDateAddSecond
    8 E# F4 M* {$ k0 O3 [& f3 n
  185. * Description: Gregorian calendar date add second.
    0 q- S/ Q# V: D1 ~
  186. * Input:       time:   Gregorian calendar date.
    - z4 ?, }/ P/ i( o
  187. *              second: The number of seconds to add.* C/ m" J3 f, a
  188. * Output:" k0 G1 O$ u* i& |
  189. * Return:      Gregorian calendar date.* w) H# R' D) h
  190. *****************************************************************/8 L5 }( i# y$ P: Y  ]
  191. DateTime GregorianCalendarDateAddSecond(DateTime time, int second)8 R5 `0 t" s# K, Q
  192. {6 i" ?# \' |7 `) G
  193.   time.second += second;" h- B' m( R7 I% a3 M
  194. " G0 m* N+ A" c( o' Q
  195.   double jd = GregorianCalendarDateToJulianDate(time);
    # V7 ]' G2 Y2 c1 _# a
  196. ) ~% }3 k% ?# S7 m! j
  197.   return JulianDateToGregorianCalendarDate(jd);) s" D6 e7 Y8 P2 Y+ @( [
  198. }; @' P. j. k. U7 t* d+ Q

  199. ; X! _6 z0 S  O
  200. /****************************************************************
    6 p7 N  T$ [! ~/ T
  201. * Function:    GregorianCalendarDateToGpsWeekSecond( X( a! ]7 c9 T0 V, Q* Z- m* @+ R( [
  202. * Description: Gregorian calendar date to gps week and second.( t7 d! M; O$ |2 C' N
  203. * Input:       time: Gregorian calendar date.
    ; O, e' r3 O/ n! N
  204. * Output:( L+ \: H; {3 d. Y  H
  205. * Return:      Gps week and second.
    % Q' g* n2 v  D+ t. U8 A# X! F. a0 K
  206. *****************************************************************/
    ! W3 X9 t0 n; e% u
  207. GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time)- F2 k1 \8 e. R
  208. {
    ' I& y! B4 S3 P
  209.   double jd = GregorianCalendarDateToJulianDate(time);
    & i3 B6 O- u4 P8 ^2 d/ F& b

  210. # f; x$ p+ }: v6 a7 p: k
  211.   return JulianDateToGpsWeekSecond(jd);
    2 D" `% L2 r/ d( D$ D4 c6 D
  212. }
    ; r5 E  {4 Y1 T0 e8 i5 R
  213. # i! B% |( p* Z/ C9 ^+ T
  214. /****************************************************************
    - S7 g* u2 r3 h0 @/ S
  215. * Function:    GregorianCalendarDateToJulianDate
    9 C; Q* r9 p# I, T# S3 Y- m
  216. * Description: Gregorian calendar date to julian date.
    ! k/ r4 i& q) r9 T& h/ U
  217. * Input:       time: Gregorian calendar date.- M, T; s+ _: F
  218. * Output:
    ' p# c9 I" ], B8 T3 X8 D" N7 a
  219. * Return:      Julian date.% ^5 u% _3 m. N+ k# D
  220. *****************************************************************/1 K' n7 Q  i4 B8 E2 N2 g+ E
  221. double GregorianCalendarDateToJulianDate(DateTime time); t" z8 N9 ^: K$ T
  222. {
    % }0 Z7 I# I8 R- S% X' ~/ |# @/ e5 R
  223.   int jdn = (1461 * (time.year + 4800 + (time.month - 14) / 12)) / 4) {$ G. v$ l5 f+ x! I% B$ s4 j1 ^) ^
  224.           + (367 * (time.month - 2 - 12 * ((time.month - 14) / 12))) / 12( E) ?0 ^! z" j- \% ~6 r8 \
  225.           - (3 * ((time.year + 4900 + (time.month - 14) / 12) / 100)) / 4
    4 b' C! |0 @3 @1 _
  226.           + time.day - 32075;1 D7 }7 v, ?3 L& Z( i' V$ j+ i

  227. 0 m1 g3 |0 t: ~( ~* h
  228.   double jd = jdn + ((time.hour - 12) * 3600.0 + time.minute * 60.0 + time.second) / 86400.0;8 P: _' a( Y5 z5 T; P" G
  229. 8 P* O. a! y7 f/ b( o+ a+ ~
  230.   return jd;
    2 N  g1 b; n2 V' R( H1 F
  231. }
    : y5 x, G: |+ S) T" J
  232. 8 A; O3 T! I9 t: k
  233. /****************************************************************, N. p! Y. j$ P
  234. * Function:    GregorianCalendarDateToModifiedJulianDate
    * B2 o! v! o- _; @, j; q; q
  235. * Description: Gregorian calendar date to modified julian date.
    9 I/ T  s8 S- E1 C1 B) i
  236. * Input:       time: Gregorian calendar date.  [) C: y% d9 }- Z. m$ n
  237. * Output:
    & ?* A  T- o1 K6 H' `' I
  238. * Return:      Modified julian date.
    " H- V# R% K8 c0 E# K
  239. *****************************************************************/" U" u; |/ O" [$ [" d: G
  240. double GregorianCalendarDateToModifiedJulianDate(DateTime time)0 s) y: T6 u6 N* K) {9 Y
  241. {$ z2 d' V0 d% S% @/ C$ P
  242.   return GregorianCalendarDateToJulianDate(time) - 2400000.5;* }  Q7 W9 e, m& o4 f
  243. }
    , j$ }2 h$ `0 U7 {  p5 }2 H" _

  244. ' K3 Z6 s  G# T  l, m3 k
  245. /****************************************************************" Y# L* m% ~2 u, N' Y; f; g
  246. * Function:    GpsWeekSecondAddYear
    - P6 J8 [8 t9 u4 \0 y
  247. * Description: Gps week and second add year.9 o! F  X, E& E1 \, a6 k4 u6 q& T. q, M
  248. * Input:       time: Gps week and second.
    % u0 i/ A4 W  e- o
  249. *              year: The number of year to add.7 ]0 O$ o. v# W2 M# G8 x0 d
  250. * Output:
    $ }+ Z6 p1 h3 C) E
  251. * Return:      Gps week and second.: r7 N7 [) L5 Q9 N$ N
  252. *****************************************************************/! ^4 }* V9 l, ]
  253. GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year)7 u: k: y8 x; O% g4 S
  254. {
    4 c- S0 w  @/ P2 d1 V' c
  255.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);
    $ K4 S. i' i4 i
  256. * D1 X5 t; W# q
  257.   date = GregorianCalendarDateAddYear(date, year);
    " D" u9 ^( n; K4 i& l, c
  258. & K& a7 E! R% O( {# O, }* L6 \
  259.   return GregorianCalendarDateToGpsWeekSecond(date);
    ) l- e$ T' A: e4 `9 D
  260. }
    * z; H+ U. t/ x/ O3 \

  261. " V: K+ a/ q  Q: N! p9 J
  262. /****************************************************************  G. S$ T3 a7 u$ P
  263. * Function:    GpsWeekSecondAddMonth
    2 D/ [$ A4 P# u6 a8 [# v4 p  C
  264. * Description: Gps week and second add month.
    6 H$ f1 }% [" ^8 W: M$ C, h4 T
  265. * Input:       time:  Gps week and second.
    ) N' {  E- a9 E3 s* M
  266. *              month: The number of month to add.. Z3 B/ z5 |% f
  267. * Output:& b: c& }' l# u/ H4 l
  268. * Return:      Gps week and second.7 C  `, Z" ^; \2 u+ z( g( X7 p+ M
  269. *****************************************************************/5 k7 A  N" t! i
  270. GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month)
    - R3 z2 C3 ]5 ]9 B  h( ]; B8 f
  271. {! e, l) k( v, ~/ d$ {
  272.   DateTime date = GpsWeekSecondToGregorianCalendarDate(time);
    ) Q& B6 w+ D% q0 T7 i. i6 o5 H
  273. . P4 F1 a- C9 }7 S- t  [
  274.   date = GregorianCalendarDateAddMonth(date, month);
    - v" u" y+ o* q& n
  275. 2 L! |0 L+ d  V
  276.   return GregorianCalendarDateToGpsWeekSecond(date);! g, u) U7 t! N1 Q, A- ]
  277. }0 z: Q5 [( a; e6 K  N

  278. 1 s- B# E3 K- \8 n
  279. /****************************************************************8 ?  i) A; `) n' t3 d
  280. * Function:    GpsWeekSecondAddWeek, n" l7 y, f1 T
  281. * Description: Gps week and second add week.
    + I0 _2 N) w& W
  282. * Input:       time: Gps week and second.4 \: Y2 r: I- |, e1 C0 d
  283. *              week: The number of week to add.
    0 M, G  n; P! u) q1 h* C; ?
  284. * Output:
    % A# G& T& U* s1 p5 b+ R
  285. * Return:      Gps week and second.
    6 z* |4 ?0 \- G- e8 T4 I
  286. *****************************************************************/
    , E% G/ r! s1 m* V5 o
  287. GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week)( {1 }, m% @- G6 a9 r& \0 m* g9 J
  288. {
    & S: {2 {1 U9 \& T4 c! O
  289.   time.week += week;, U* H( {  H. m5 s  f- Z1 B! k

  290. " K. l* l- |) p
  291.   return time;0 U# a  K: ~: W! R- Z* t5 u$ f
  292. }0 I( T( l; A+ g- V9 j# {2 m6 T

  293. # W$ X) A  `( T3 P
  294. /****************************************************************/ Q- ~3 E& {: a, k% x# B. U8 d) e0 v
  295. * Function:    GpsWeekSecondAddDay$ Z6 G, j" O+ K& i& x/ {
  296. * Description: Gps week and second add day.
    / \+ e0 g/ X" }/ F) Z9 E3 U( c1 j! J6 [
  297. * Input:       time: Gps week and second.
    ' j* d7 j* P2 f7 b& H/ i* d
  298. *              day:  The number of day to add.: u' @& e' C+ G. i" |
  299. * Output:; M& ]- C& I0 T" B! }; E
  300. * Return:      Gps week and second.
    $ p  C2 A9 D3 j$ r( \
  301. *****************************************************************/; Y" G% g  r* K5 B. ]4 X. b
  302. GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day)* A: O% y7 I5 B! _3 b" r/ W+ U7 T$ m# b+ c
  303. {, O8 ?9 h" n8 |
  304.   time.week   += day / 7;
    / X" a6 H/ N% d( g! @: d4 d; K
  305.   time.second += day % 7 * 86400;# u% Z- Y* f% i8 Z$ k9 Y
  306. - P3 f/ {- w) l1 D+ ?
  307.   if(time.second > 604799)! x( ]9 i# g3 P
  308.   {4 o4 S* E, w, T4 O6 S3 J
  309.     time.week   += 1;
    . X, {3 C) i6 ]& Y# M
  310.     time.second -= 604800;7 ^: u9 C" n; ^
  311.   }9 i0 g+ |$ Z0 A+ |# A* n4 b+ _* Y

  312. ( V3 k8 T  l) m6 q) }) |4 X
  313.   return time;0 n+ W4 Z) U2 n  w/ l
  314. }$ L0 J# C5 i6 ~
  315. . V/ Y5 _& v2 z8 c( \& o1 N% T
  316. /****************************************************************
    7 N. ~& U; _! [; W
  317. * Function:    GpsWeekSecondAddHour
    0 w" b2 t" s0 E9 I
  318. * Description: Gps week and second add hour.
    * I9 `6 V. q3 e( M# w
  319. * Input:       time: Gps week and second.8 D  H8 Z/ c4 p( x3 Q
  320. *              hour: The number of hour to add.
    4 H+ ^5 K* x9 s
  321. * Output:
    $ e  M+ x" q8 ^8 k8 G8 s$ m: X" M
  322. * Return:      Gps week and second.
    : u% o& p0 g" B( e9 L$ A
  323. *****************************************************************/+ R/ i2 n/ g0 M. }4 q9 d6 A
  324. GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour)9 O) m- @/ G7 ]$ V6 {. M+ I
  325. {
    9 H) f' y( a- ]0 K
  326.   time.week   += hour / 168;
    * _' q* M+ V4 l: |; ~7 @, Z3 h7 _
  327.   time.second += hour % 168 * 3600;) t* E: X' N7 x" Q" X
  328. 7 T+ y* X% Z4 I0 L7 s5 q' m  W( o2 W, M
  329.   if(time.second > 604799)5 G; v5 d, H. ?0 f" d
  330.   {
    4 \( `) r9 T$ o8 @
  331.     time.week   += 1;% q' h2 C& h8 G
  332.     time.second -= 604800;
    * U3 ^2 e$ u8 a8 o5 j
  333.   }- {5 z* Y) G) g1 _$ Q/ {
  334.   
    / t. a5 F: D' d) M) B
  335.   return time;/ W' ?' A& o. ^
  336. }( h4 w+ j% s7 ^" t* b
  337. 3 r; P- ]8 }) t9 x
  338. /****************************************************************. M  ~3 w( Q; P! d9 ^" Y
  339. * Function:    GpsWeekSecondAddMinute# k2 I7 P0 v2 q8 C+ k3 s
  340. * Description: Gps week and second add minute.
    # B2 o0 v( l- R: X  t
  341. * Input:       time:   Gps week and second.- L. k5 N  o7 y1 n) x
  342. *              minute: The number of minute to add.; }) ~- w( N, h( T! c% @( A
  343. * Output:
    . r; X' l/ v+ H) X
  344. * Return:      Gps week and second.* q' J0 b. j! `
  345. *****************************************************************/
    0 e) s; _. f- Z1 `( a
  346. GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute)
    % N5 j- m) N1 Y: M
  347. {
    - R" }. `. _+ f. L
  348.   time.week   += minute / 10080;. A& c* b' Z. }8 M9 _5 s8 ]
  349.   time.second += minute % 10080 * 60;4 v* |& I# `( D& [
  350.   
    1 p7 U3 D! K- L% {
  351.   if(time.second > 604799)
      C& R( b. [6 F# t
  352.   {5 {5 f5 p' U5 Z' ]* @. C
  353.     time.week   += 1;6 S) B. [' k2 n! ]7 s! L2 U4 I& ?
  354.     time.second -= 604800;
    + m4 J5 M& W) K, ]! h4 |2 k% z
  355.   }  ?( g; E+ Z' J$ k% Y$ o
  356.   : W( C1 o! |' o3 n+ n  Y
  357.   return time;4 [3 n6 m' c$ H* A6 P$ `
  358. }2 d8 i6 N* v+ x
  359. % Z6 r. p% D: c: }) u  B
  360. /****************************************************************
    4 t) L; @" ~. A3 J
  361. * Function:    GpsWeekSecondAddSecond! i; _& i7 ?( A3 _1 t. m
  362. * Description: Gps week and second add second.; L! R6 \5 k* S6 |! ^1 ?
  363. * Input:       time:   Gps week and second.
    * s0 @+ [/ u4 B. A( a; x
  364. *              second: The number of second to add.
    6 ?7 f, M1 f4 g4 |/ y* H4 Z
  365. * Output:( ?! e- s$ K1 G$ }2 W
  366. * Return:      Gps week and second.8 b, s1 }' A' ~; h, E
  367. *****************************************************************/, H" V% O  p0 @) h7 J+ G1 _3 A
  368. GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second)
    ! @' j6 s4 e; o7 G
  369. {4 Y0 g8 [; N2 u  R: t
  370.   time.week   += second / 604800;
      {) {+ {3 D' t4 ]$ _
  371.   time.second += second % 604800;5 a) j6 {. A. [- v' c! s- m
  372. 5 \$ B2 |, y$ o( ]& ~6 p4 M
  373.   if(time.second > 604799)
    ( D* P* z5 w  c4 U1 u+ z) X
  374.   {& o& g0 J6 J( w* J" k
  375.     time.week   += 1;
    " ]; c# D- M' B: l4 Y. J6 z
  376.     time.second -= 604800;- v$ ^6 t& e, Y6 y' {3 @/ {- r
  377.   }
    & s. S) Z1 a- v) g
  378.   8 Q4 X. w0 Y. F, H
  379.   return time;
    9 x6 o2 z; ]7 K0 F
  380. }" H6 X( t; u0 E& G1 c: y8 B2 \

  381. 5 ^5 ]: @: J6 W
  382. /****************************************************************& t2 U1 H. e, n5 G2 s% r) |; M
  383. * Function:    GpsWeekSecondToGregorianCalendarDate% f0 ?$ c( R* I/ o
  384. * Description: Gps week and second to gregorian calendar date.5 U% b, \% j0 s1 l
  385. * Input:       time: Gps week and second.8 y. [7 m7 e& X7 s. z
  386. * Output:
    # I* h- \0 y( x8 H# N/ x2 N
  387. * Return:      Gregorian calendar date.. Q, k9 B8 n+ I
  388. *****************************************************************/
    ) n. ~" p9 x1 a  E, p% E
  389. DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time)/ C0 V9 W( r/ i  C, c/ L
  390. {% j) V; h, U" O' a- P/ g
  391.   double jd = GpsWeekSecondToJulianDate(time);
    5 W! M% e  h0 P3 i/ G- F
  392. ' c* X. |* x6 i
  393.   return JulianDateToGregorianCalendarDate(jd);8 r. L1 L" t; n  E5 X4 g- G
  394. }( l+ @8 }( @5 s4 k1 H! K' |2 c; I2 `

  395. 5 y# P' ^8 c5 H$ j- ~
  396. /****************************************************************! d9 p3 x; R) U( Y" J$ ~' j' p
  397. * Function:    GpsWeekSecondToJulianDate
    7 l1 W5 q8 Q+ ?4 K
  398. * Description: Gps week and second to julian date.
    # h' E, F% a( @0 N
  399. * Input:       time: Gps week and second.  |" E/ x8 ~4 Q+ v  g
  400. * Output:
    $ Q+ w" B: w2 b  L
  401. * Return:      Julian date.
    - k8 z5 E: E; O4 z$ ?. T1 ]" T1 |
  402. *****************************************************************/
    + ?4 \7 j! U" M
  403. double GpsWeekSecondToJulianDate(GpsWeekSecond time); i* p' M$ R$ E  i8 h( Q! @
  404. {( m: v( n' E+ o
  405.   double jd = 2444244.5 + time.week * 7.0 + time.second / 86400.0;
    ' P" m  Z$ P. C1 Q, z9 a! g

  406. 2 A' ]% M$ {$ X6 E' v
  407.   return jd;; A  O' @! Y" o, q' h$ i
  408. }
    ' ]( ~4 V/ G3 Q6 N& n

  409. & ~+ I2 D7 ^6 {) y
  410. /****************************************************************
    # W4 w" w' i% o6 `5 j
  411. * Function:    GpsWeekSecondToModifiedJulianDate* I; ~2 L; a  s2 e9 e  u2 O7 i
  412. * Description: Gps week and second to modified julian date.
    ! S7 ~4 O& w8 `. X' K& |8 T
  413. * Input:       time: Gps week and second.: N( R3 v: q; y
  414. * Output:' g7 j* S( R# S: w
  415. * Return:      Modified julian date.
    ! P: m# ]. f; z, c6 c! Y  B: A
  416. *****************************************************************/5 |  Q5 X. g$ Y
  417. double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time)
    7 E0 W/ h. U% S9 w
  418. {# D/ @2 J. S3 B. b# n- H0 k5 s
  419.   return GpsWeekSecondToJulianDate(time) - 2400000.5;
    2 i2 f+ v; D& h# B8 p' z
  420. }7 }! D& L8 l: N3 L& P1 N9 c
  421. 2 q0 t& T+ v: C# T- @: t- R( n
  422. /****************************************************************
    * S0 u. l0 b8 R( Q2 }% s
  423. * Function:    JulianDateAddYear
    % w  c. ]7 U- h( Y1 h1 ]
  424. * Description: Julian date add year./ P0 W2 V+ o! h! t9 q
  425. * Input:       jd:   Julian date.
    / p# v$ f+ n) s$ `6 t- B2 E3 s
  426. *              year: The number of year to add.$ y1 T* z, \* f3 N& G: ?( v
  427. * Output:9 b! A! h$ H+ l5 {, R8 G  z+ V
  428. * Return:      Julian date.
    $ \8 k. Y8 t& u- Q5 I- ~1 A
  429. *****************************************************************/
    ! K1 z2 X3 s3 O4 _
  430. double JulianDateAddYear(double jd, int year)$ e& |. v8 Y2 t; ?5 k5 q: R) }1 `" F
  431. {
    0 g( v  r" x+ `: z9 S* u
  432.   DateTime date = JulianDateToGregorianCalendarDate(jd);! t  b# e; {5 d) r& G

  433. 6 }% @2 M2 s+ p( n! [3 D) B' o7 f
  434.   date = GregorianCalendarDateAddYear(date, year);" m. F# f9 M, |2 Y0 m% q) X3 i$ F

  435. " b8 d: G) w3 M& W
  436.   return GregorianCalendarDateToJulianDate(date);8 n' G$ v+ d- n4 n* C4 j' |: Y
  437. }8 y* Y# A/ C8 z4 W6 u5 m

  438. 5 K3 G7 v2 p& X% ]% d
  439. /****************************************************************$ U7 U! ~/ B! [; K' e
  440. * Function:    JulianDateAddMonth+ X, \: r9 z3 b
  441. * Description: Julian date add month.
    3 B' R2 y0 C5 J0 ?7 I
  442. * Input:       jd:    Julian date.
    8 i; ~' `" s+ u! H9 {' m
  443. *              month: The number of month to add.( z/ P# u( v1 N
  444. * Output:( t8 X& b0 t" _3 J; T
  445. * Return:      Julian date.0 [; R, O4 W- ~
  446. *****************************************************************/
    . L6 a7 }, Q3 B& D3 i; p/ D
  447. double JulianDateAddMonth(double jd, int month)
    7 Y$ o3 l2 M! P* P4 }
  448. {9 P% C: Y' h2 i; f
  449.   DateTime date = JulianDateToGregorianCalendarDate(jd);4 E* |( W; E" Y

  450. $ Q" W/ n; U. `
  451.   date = GregorianCalendarDateAddMonth(date, month);
    - P" j. G( Q9 v& C# r+ R- P" E5 C/ i
  452. ! T! R" Q2 W5 O& h3 l
  453.   return GregorianCalendarDateToJulianDate(date);
    6 z/ Q" n4 J0 R3 N8 I# t
  454. }) N- S) f' k3 t' o" Q

  455. " U' S) |% z) O
  456. /****************************************************************' S8 z( |7 b8 m' X( q2 h
  457. * Function:    JulianDateAddWeek: u+ S8 |. M$ p" Z; W7 |. n2 b6 A
  458. * Description: Julian date add week.
    ' K8 v$ B. Q9 K
  459. * Input:       jd:   Julian date.
    3 b& e% [5 P5 W6 i
  460. *              week: The number of week to add.) {+ P- k8 c% \' u, {: J+ d
  461. * Output:
    9 w6 i8 r" F' u8 f
  462. * Return:      Julian date.: F5 _. j: ^1 L4 A3 N9 i
  463. *****************************************************************/0 H& e1 _7 z3 _1 }( N7 J. U4 ~' @
  464. double JulianDateAddWeek(double jd, int week)
    + A) ]+ \  I- k* `
  465. {2 a, n* N" \( I
  466.   jd += week * 7.0;* M8 @1 t, Y# T7 Y' X1 v7 w
  467. * a* \9 X' J  h  ]) g) x6 _
  468.   return jd;4 T( [7 x/ Q- [
  469. }  f) F  R- o: F# H
  470. / e7 k3 k  B+ S) q
  471. /****************************************************************: L0 ^' i  m. }' _5 o7 b
  472. * Function:    JulianDateAddDay
    6 [( W1 s' Z& N
  473. * Description: Julian date add day.
    0 ~; `& O! n% `* v
  474. * Input:       jd:  Julian date.2 w; `3 j( l1 _, Z( j( M' [
  475. *              day: The number of day to add.; H" z- \- U. Y; M
  476. * Output:1 J% b4 S9 Q% ^8 U
  477. * Return:      Julian date.' b; r# p! Z4 c* D! ?
  478. *****************************************************************/
    # k! t$ o/ s' ~* e* c0 o
  479. double JulianDateAddDay(double jd, int day)7 l. I  J) x- a1 a. r; D) v5 ^
  480. {
    8 J* ~8 B+ d  d, S) I" f# s' s$ d
  481.   jd += day;
    : m3 Y9 I* i) ?+ }  M( y
  482. * D; ?) G: m: D
  483.   return jd;
    . m# E* L+ f/ u, }& x' M* e4 @
  484. }" ]" p, ]7 G3 _+ A/ G  C( G4 v

  485. . p, T' |1 X: ]9 H" I$ K0 s
  486. /****************************************************************) \5 X% E) _. Q, J& \& I& Z4 f
  487. * Function:    JulianDateAddHour
    ' h8 m7 a0 F9 B! Z2 ]. z
  488. * Description: Julian date add hour.6 f. m& d! z6 x# `( |+ F
  489. * Input:       jd:   Julian date.
    . ~" f/ M  r) E2 y$ t* O. P  b5 ~
  490. *              hour: The number of hour to add.6 I3 I. a" L/ ~
  491. * Output:
    . @6 B6 _3 n3 K5 z7 F1 ~' Q
  492. * Return:      Julian date.
    ! y! k0 S( ^9 ?0 v9 Q& O# @9 T: n
  493. *****************************************************************/. x9 Q4 \! L% N
  494. double JulianDateAddHour(double jd, int hour)
    # ~- O3 I) s; @0 W
  495. {
    5 R& L. C, t+ U! }; m
  496.   jd += hour / 24.0;9 q( \+ D3 D! W4 l" J* C
  497. 6 |9 C( o+ r: M+ ?4 I' V( p
  498.   return jd;
    1 B- T8 Z6 d' x4 K
  499. }
    ' O5 O9 E. K* O& U
  500. 6 ~7 @6 c' c: Q2 p: u
  501. /****************************************************************
    & F6 [- {. F/ Z! s) l. \$ m
  502. * Function:    JulianDateAddMinute
    % Y6 u$ w  S" y2 G1 z
  503. * Description: Julian date add minute.0 ?' E% V+ ~' `' G7 u! X
  504. * Input:       jd:     Julian date.8 z/ s  R0 F  L* v( t3 F
  505. *              minute: The number of minute to add.1 B' }  h# P2 w1 y6 I
  506. * Output:
    * ]  ^$ |: S) W6 K% `
  507. * Return:      Julian date.5 }: ?5 m$ V; L6 Y
  508. *****************************************************************/
    2 b& x$ ~2 [( [7 s  p6 p6 l
  509. double JulianDateAddMinute(double jd, int minute)% M3 K. r3 b4 r" J# P% a
  510. {
    0 V2 o6 U6 R! t% [$ C8 e9 f3 w6 P
  511.   jd += minute / 1440.0;
      U- C# _9 w6 t2 ?* k
  512. ; I* J* [) c( ]' m4 \" c
  513.   return jd;' q/ v; Y* v  t# H6 a. `' i
  514. }8 x" I0 _; _. f% ^% _! i
  515. # r3 T: |) s9 F# {  u$ q
  516. /****************************************************************
    * S1 e# u! Q, q  |+ V: y; n
  517. * Function:    JulianDateAddSecond. B8 \$ W* c) g8 ]6 Q
  518. * Description: Julian date add second.
    3 Z! g" l3 n2 T2 e. v; W3 `' l
  519. * Input:       jd:     Julian date.
    / C( c: Z- h  w) n
  520. *              second: The number of second to add., s' [2 h( q  m( a
  521. * Output:
    1 N6 `; h. U# `5 r, R
  522. * Return:      Julian date.
    5 U3 t5 ^8 s& u2 k4 v  |
  523. *****************************************************************/9 M+ \8 n. U2 v
  524. double JulianDateAddSecond(double jd, int second)
    " X( V' `$ F  r" c* v) j
  525. {) J" y& Y% a$ S. L" q1 U1 k) @; H  R; p
  526.   jd += second / 86400.0;. h9 s, c. s- F6 V' u8 n

  527. : C) e+ Z1 u8 }% s6 i
  528.   return jd;
    . w7 Y1 }! ^) o2 I$ Q
  529. }* N& u8 Y; V& z! E7 f3 d+ V
  530. 5 L9 ^4 t+ C% o: u( c+ Q4 `( e
  531. /****************************************************************& r" c0 ~& C$ s% R, m6 g9 s
  532. * Function:    JulianDateToGregorianCalendarDate! N: V. I" ^: U( l2 q: z( |
  533. * Description: Julian date to gregorian calendar date.
    9 x7 M! C9 L, h) Z
  534. * Input:       jd: Julian date.
    8 w) C) a' `5 c( F5 O4 e+ e
  535. * Output:
    4 u  `" k, Y$ B8 ?
  536. * Return:      Gregorian calendar date.$ x# [5 \  }1 w
  537. *****************************************************************/0 u  Z! O1 C- w+ ]+ X7 Y# T
  538. DateTime JulianDateToGregorianCalendarDate(double jd)( Z5 ^* F0 |; ~- }& E& C
  539. {
      A1 n- a. r: T6 U, z
  540.   int y = 4716;
    . j. x$ L# Q9 B' W& v
  541.   int j = 1401;
    ' s0 R* X" i( p2 M
  542.   int m = 2;& n8 w5 b8 ]; m  A, s
  543.   int n = 12;
    ! Z* F' _  z) r% x$ b) M
  544.   int r = 4;4 l- ^3 _7 [& {( {* p
  545.   int p = 1461;
    - p9 \+ r) d  u2 u
  546.   int v = 3;
    + f" C4 y1 D' p* A; }7 D7 T
  547.   int u = 5;- ~- B' J+ w$ \$ n( J. v# h
  548.   int s = 153;, [. z1 ?5 r5 Z2 x/ C  r. _
  549.   int w = 2;
    ' r% I) F: I7 j1 i
  550.   int b = 274277;4 Y9 q4 a/ U& ^3 F+ `/ F# D1 N: P9 y
  551.   int c = -38;
    1 \" @& W$ M) B* i5 V' J4 G5 E. I

  552. : h) g* ]9 @7 _. Z& Q6 h9 U6 ]
  553.   int jdn = (int)(jd + 0.5);
    2 N. |# y) D6 W$ W- j1 {% [7 c: {
  554.   int f   = jdn + j + (((4 * jdn + b) / 146097) * 3) / 4 + c;4 s# W, `( R! [, q$ U
  555.   int e   = r * f + v;- R- [( e4 p% r0 ^- k
  556.   int g   = (e % p) / r;
    * O. G$ i. p$ o- }" D
  557.   int h   = u * g + w;  {+ R' ?: z& c8 i
  558.   n* B* ?: X7 u& D4 R! Q/ e
  559.   DateTime time = {0};
    ! W- [5 k& l5 ?3 D* X1 O9 P$ {9 O
  560. ! g& u% S4 g) g9 V# \7 H; m
  561.   time.day    = (h % s) / u + 1;
    : D3 S. o3 U7 w: R; i6 M
  562.   time.month  = (h / s + m) % n + 1;
    8 H% E' t, w1 q; [3 p
  563.   time.year   = e / p - y + (n + m - time.month) / n;
    : D4 ?' O/ d6 ^' _# @2 c9 b' q
  564.   time.hour   = (int)((jd + 0.5 - jdn) * 86400.5) / 3600;3 ^% e7 C9 F& ], P0 Z
  565.   time.minute = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600) / 60;
    . Y$ ^% S+ P/ q! F" ~% d1 g7 M
  566.   time.second = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600 - time.minute * 60);
    ' w0 o- Z, D3 V4 ^8 z$ e9 g

  567. 0 T. ?  }" e8 L/ M( o
  568.   return time;; p& r  ]% y# `" J6 m( f6 F! X  O
  569. }) [- @9 Y, f2 _, ^( l" H

  570. ' o4 v/ i8 ^- u
  571. /****************************************************************; ^/ }0 d6 Z) f+ j7 N" H
  572. * Function:    JulianDateToGpsWeekSecond
    . _2 C) s/ X+ r7 U+ ]9 j+ t5 q
  573. * Description: Julian date to gps week and second.1 E& ]8 g; b& V6 F
  574. * Input:       jd: Julian date., D% h1 V" B) d" J0 V
  575. * Output:* A; m7 j- U1 ?( ]0 X& `
  576. * Return:      Gps week and second.
    0 z0 H# I( d& N4 ?3 U  G* p) f
  577. *****************************************************************/
    ; d, Z9 B9 X- {# W
  578. GpsWeekSecond JulianDateToGpsWeekSecond(double jd)
    2 M# @2 g$ ]- s( d# O
  579. {
    " M0 K& {7 j2 N: }6 {
  580.   GpsWeekSecond time = {0};# C6 f4 Q7 r0 O
  581.   DateTime      date = JulianDateToGregorianCalendarDate(jd);
    & a/ f9 F$ x) w: b4 B0 i$ g
  582.   A# C- n( W3 ^. M
  583.   time.week   = (int)(jd - 2444244.5) / 7;
    % p% h% i5 O( a0 u
  584.   time.second = ((int)(jd - 2444244.5) - time.week * 7) * 86400 + date.hour * 3600 + date.minute * 60 + date.second;
    3 X7 n1 |0 P- F
  585. ( n% w3 d4 ?  q3 f" _9 o
  586.   return time;8 m" B* j: f( T# N- y) p
  587. }7 L; i7 [% m. ^5 p' J

  588. 6 A8 ]# z; ^# N5 y2 y# |
  589. /****************************************************************) H$ l4 `9 c7 k. T
  590. * Function:    JulianDateToModifiedJulianDate
    # D# i. q/ {( X7 u2 ^9 A0 ~- b
  591. * Description: Julian date to modified julian date.  i$ z$ W( R6 x
  592. * Input:       jd: Julian date.
    . m7 Z3 M/ M4 J7 K/ s8 c
  593. * Output:
    ; u, L4 C: `4 c- R- M$ ~
  594. * Return:      Modified julian date.
    $ i4 M- F/ p3 M$ f& e7 j
  595. *****************************************************************/( e! s# r$ i9 t9 r, h. Q) Y
  596. double JulianDateToModifiedJulianDate(double jd)
    ) L' r3 ]& C9 H" M3 `( W
  597. {, |; n; U- N$ g. V) p
  598.   double mjd = jd - 2400000.5;5 R' |$ f: i! J# F4 e8 U+ |' F

  599. 7 s9 T. M3 S) I' A' R% g$ O4 h
  600.   return mjd;8 i' h. c' o" t+ Q; T; X& H
  601. }7 \5 v2 q* _2 U6 ~1 n9 j5 N; Y

  602. 8 e, _2 n- B5 X8 S6 ^4 Z
  603. /****************************************************************' u% T8 N" s" V0 M- u+ ]. I
  604. * Function:    ModifiedJulianDateAddYear
    . o+ P; ?7 N4 [3 y0 N, v
  605. * Description: Modified julian date add year.
    9 }2 ]5 `! q' j7 @
  606. * Input:       mjd:  Modified julian date.& v+ K5 B( L* j- @
  607. *              year: The number of year to add.0 ]; N/ ]6 |- R! e6 w
  608. * Output:
    + \0 H- O' I/ v! F
  609. * Return:      Modified julian date.
    - N+ `  [2 f- `6 A
  610. *****************************************************************/
    % u2 H2 A$ ?7 _( v; L# V
  611. double ModifiedJulianDateAddYear(double mjd, int year); F% ^( l, r6 w. z. N
  612. {; a. W3 ^+ T  r0 ?. Z4 t& y# A
  613.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
    4 ~5 \1 g, W. z5 J; p
  614. 2 b5 w) J1 k# f; r# T0 G
  615.   date = GregorianCalendarDateAddYear(date, year);4 r: [+ X* c' a, `/ O( z1 B

  616. - r4 p% Y5 C/ L5 T( [$ d4 s1 i7 H: T
  617.   return GregorianCalendarDateToModifiedJulianDate(date);+ i- j3 @6 \# N& g3 f- O
  618. }
    9 X$ }' q' \" G# t  p$ L4 G& N& ~

  619. . }; g/ [; G& {6 _6 a, L6 ?+ s
  620. /****************************************************************( C: F  `5 d; l
  621. * Function:    ModifiedJulianDateAddMonth; k( P6 w$ v& o
  622. * Description: Modified julian date add month.
    ( |2 w" a+ {* ?/ G8 `5 E5 h- y# x& J
  623. * Input:       mjd:   Modified julian date.
    3 [/ \' f6 t0 l* [  ~
  624. *              month: The number of month to add.' z% C! x# W0 e; J6 ~6 I
  625. * Output:
    3 ?) n& n# U: F5 i) D6 V
  626. * Return:      Modified julian date.* }( @3 l1 t) n6 ~8 z; _
  627. *****************************************************************/
    $ o$ ^# _( o7 G* d5 A) Y
  628. double ModifiedJulianDateAddMonth(double mjd, int month)- p7 [7 P* i$ A/ \# i+ o- g( U
  629. {4 Y6 g# V( J! }5 R4 T4 B9 m8 u
  630.   DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);( E  t! d. H* U' \& v+ \& ]

  631. " m; z  l- M: X# d, p, ?5 I) a: ~- p
  632.   date = GregorianCalendarDateAddMonth(date, month);1 C: Y7 c" U4 Z" |+ C

  633. # Y! x, i9 I8 L# e6 t
  634.   return GregorianCalendarDateToModifiedJulianDate(date);
    ) U- u* ], A8 S; v9 s
  635. }
    2 z0 P) [+ X2 I

  636. 0 s$ G9 B! k% W/ @
  637. /****************************************************************
    0 E. P2 [, m) j) V8 m  v
  638. * Function:    ModifiedJulianDateAddWeek
    6 k" v; r7 e, B. p( L- x; y" P$ j
  639. * Description: Modified julian date add week.
      x* |+ T7 \6 |: t! M
  640. * Input:       mjd:  Modified julian date.% i- \5 Z# f) \& h: o9 j$ _
  641. *              week: The number of week to add.
    * A, v. T7 \2 X$ F. I' z, E
  642. * Output:
    ; s/ R7 i) E5 Q3 d
  643. * Return:      Modified julian date.
    # A6 Y1 ~! b& r. d
  644. *****************************************************************/
    ( ]4 t4 Z7 z% N/ H4 [
  645. double ModifiedJulianDateAddWeek(double mjd, int week)
    $ A) }8 v. V) @5 r* v
  646. {
    8 p, U0 \" }5 U5 }2 v
  647.   mjd += week * 7.0;# s5 L2 j- y' q' E4 j

  648. 6 N% z) [2 f; B8 L# Q+ t7 p; I
  649.   return mjd;. [4 F- F1 _  R( l& I2 c3 s
  650. }
    ( n8 q, M/ u. f2 l1 z

  651. & C4 |( H/ ~1 {9 A5 c) m
  652. /****************************************************************6 _$ P! M4 V' U( r5 R7 A7 t
  653. * Function:    ModifiedJulianDateAddDay
    ) D$ X+ |. \; ~* S, |
  654. * Description: Modified julian date add day.
    . K! W; Q2 o" u8 T7 B' Q: W
  655. * Input:       mjd: Modified julian date.
    8 F8 ]4 Q( E: D5 a
  656. *              day: The number of day to add.0 l/ V) }5 ~, R6 W. h9 _: ]3 ^6 H, Z2 W
  657. * Output:
    1 H1 [- X) p6 a2 _% O
  658. * Return:      Modified julian date.. S7 b8 V7 G+ ]* v/ ~8 q% l7 \
  659. *****************************************************************/. L8 w9 [( k: I( A5 U% w( D
  660. double ModifiedJulianDateAddDay(double mjd, int day)
    + \3 C" m6 N. I1 k
  661. {/ i3 N) f# ^# ?! O
  662.   mjd += day;
    ' m. G6 s; x- X& T# I8 l2 |. l

  663. 9 {* C" u* H& [/ f, D6 ~" T
  664.   return mjd;
    8 w4 V% S! C& ~! M
  665. }
    2 T8 k* L, A3 s" ]# m0 B
  666. 8 X& j& r9 p- m( z
  667. /****************************************************************
    ! i6 b" O9 O( W
  668. * Function:    ModifiedJulianDateAddHour* v1 d' [7 t, K; F/ S& O3 e
  669. * Description: Modified julian date add hour.
    4 m5 o1 |1 p& I0 c
  670. * Input:       mjd:  Modified julian date.
    ( g; b! ]& `8 w
  671. *              hour: The number of hour to add.
    . d, O* W# w- M& j7 ~* y
  672. * Output:0 C3 F. L% t; ~9 E0 l
  673. * Return:      Modified julian date.
    # [& ?7 j7 _6 m% W/ _
  674. *****************************************************************/2 J* q( \' S$ P! s, U- ~, v
  675. double ModifiedJulianDateAddHour(double mjd, int hour)  a8 x4 K/ f1 h# M  A0 O! n
  676. {) q+ Y. H6 r2 A7 L1 D/ x
  677.   mjd += hour / 24.0;
    $ \5 B- _0 ]6 D  b+ |" l
  678. ! M- t7 O7 n5 C- c& P+ E
  679.   return mjd;
    ( }& j# n* ?1 n1 Z* U
  680. }8 H0 m) k7 [" m4 f1 k) R

  681. " x, _  I* g9 `& r$ d# j
  682. /****************************************************************
    , ~; C! p! m1 d' a0 b- X  Z
  683. * Function:    ModifiedJulianDateAddMinute
    2 ]" K3 F2 ?! Q: D
  684. * Description: Modified julian date add minute.* N% A7 e" H9 _  S+ ^/ G9 w
  685. * Input:       mjd:    Modified julian date.
    3 R  k3 F# e& Y' u/ w
  686. *              minute: The number of minute to add.
    8 {4 v  ?; ?. N* y6 J! p
  687. * Output:4 y5 F& T& ?7 T. V* r0 u6 r
  688. * Return:      Modified julian date./ W& F  g6 \3 t+ a: W
  689. *****************************************************************/+ E9 G7 b1 W- r& m/ i
  690. double ModifiedJulianDateAddMinute(double mjd, int minute)
    . p9 m2 D1 w* k8 C( \% j' _
  691. {
    ' d1 h+ M# E* G; U7 K8 q9 j2 t
  692.   mjd += minute / 1440.0;
    6 J) q; P# K/ S8 x- ]3 V
  693. 2 c9 }* n% C1 g; U
  694.   return mjd;
    8 n$ `0 G4 P. S# [1 }4 p" b& h
  695. }+ T$ M% s4 W1 ?3 g% R( p+ a- b
  696. & U8 m, K$ T" s  w. o" w
  697. /****************************************************************
    1 j4 N+ \3 V: u7 u! e- ?
  698. * Function:    ModifiedJulianDateAddSecond
    , B! Y- _1 Z8 u, N4 z
  699. * Description: Modified julian date add second.' w' e# Q/ [) R. P
  700. * Input:       mjd:    Modified julian date.
    " Q: I0 c8 ]/ Q4 _% ?
  701. *              second: The number of second to add.
    " ~9 C+ S! ]1 c
  702. * Output:
    " f0 I* m6 `2 R: v# t3 W
  703. * Return:      Modified julian date.) T* r8 ?2 v/ _" k$ q* l
  704. *****************************************************************// O7 n2 z& e0 A6 R: M0 J# g/ x% j
  705. double ModifiedJulianDateAddSecond(double mjd, int second)
      r1 G$ X+ X  u; Z/ n
  706. {; z* H$ {8 O* k9 W, I- L9 l
  707.   mjd += second / 86400.0;9 A! U, ?3 I* c& E+ d

  708. ) t+ F* A* ^3 e' X1 P% C
  709.   return mjd;
    8 G8 y. l7 z8 Z. T
  710. }8 F9 x. }' ?' ^& n
  711. 1 I4 {$ K, _$ t  R# O
  712. /****************************************************************, E& @2 m: [% F5 K$ G8 T
  713. * Function:    ModifiedJulianDateToGregorianCalendarDate
    8 G; e4 ]. Q$ ]* s8 @/ B( B0 O
  714. * Description: Modified julian date to gregorian calendar date., c' f1 m$ W2 w
  715. * Input:       mjd: Modified julian date.& G8 e* x8 c! }) l' Q
  716. * Output:
    / c' a7 S8 q4 m
  717. * Return:      Gregorian calendar date.
    " w3 T. q' _6 ~+ D% v
  718. *****************************************************************/
    % P) j9 J  |- I9 S4 a2 E' H
  719. DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd)
    # ^+ A- T. F/ e/ m! K# a* D
  720. {
    * h: d8 C6 I1 y" w5 h" a
  721.   return JulianDateToGregorianCalendarDate(mjd + 2400000.5);
    $ P9 g, b' r( ?/ D1 t
  722. }
    0 q+ q+ T4 a% b0 [5 W2 @* P

  723. ; P7 D) {8 F( V! `
  724. /****************************************************************4 z& S0 B1 ~: O0 k0 M+ c* [3 d% S
  725. * Function:    ModifiedJulianDateToGpsWeekSecond- a8 ]; f( ?& x" z; I% B
  726. * Description: Modified julian date to gps week and second.7 s% D3 t& |. f& q
  727. * Input:       mjd: Modified julian date.
    + ~) N, ^' n% E7 r- c4 y  y
  728. * Output:
    , D' n5 b  B! _9 y0 A6 }
  729. * Return:      Gps week and second.
    ; ?5 \0 a/ C1 W* o% W' I4 R
  730. *****************************************************************/4 R; P- X) \( ]5 Y
  731. GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd)5 S2 M0 A2 D7 o# T
  732. {+ M1 ^7 G( N1 O% ]% z: m, I2 z
  733.   return JulianDateToGpsWeekSecond(mjd + 2400000.5);
    9 y+ M* M. p; M
  734. }2 [# }$ H% H! P4 v
  735. * @+ d& ~  H! q
  736. /****************************************************************
      Q% I# Y$ H0 f, L7 [
  737. * Function:    ModifiedJulianDateToJulianDate& F4 a% ?4 J0 g* x8 b# _+ B1 ^! i4 T
  738. * Description: Modified julian date to julian date.; N* m* k  Q& T+ u/ z
  739. * Input:       mjd: Modified julian date.
    3 F, H9 k) [' J( S$ o
  740. * Output:
    ! R) \. |1 Q& K/ _( K+ C! `
  741. * Return:      Julian date.
    " j. s- c1 e1 s
  742. *****************************************************************/
    ; Q/ _1 m. i- }- v5 w. n
  743. double ModifiedJulianDateToJulianDate(double mjd)% n- K# \; m/ F6 G0 [; I3 [
  744. {5 j" ?. ]8 U; E6 F3 q
  745.   double jd = mjd + 2400000.5;
    4 k" }/ O) }7 F. N7 j- ^$ A% A" A

  746. ) \+ p5 \  p5 u
  747.   return jd;5 R: M8 S% K$ C7 h
  748. }
      u6 W3 G1 I8 f! L! Y
复制代码

* y; l* l6 M9 F; \/ z+ g7 ?      main.c文件, I" Y! G# J& w% ^9 I+ o) R
  1. /****************************************************************
    $ U# S6 W) O) c5 V8 b
  2. * Copyright (C) 2017, XinLi, all right reserved.4 |8 D2 W$ Y& m5 M0 s
  3. * File name:    main.c# T; @) q4 m, J, ^8 @. b1 [/ k* z
  4. * Date:         2017.10.17
    0 ^3 w5 {5 i" i7 {* g6 K$ S' D
  5. * Description:  GPS, UTC and local time displays.& k5 ]0 Q+ X  W1 @2 P
  6. *****************************************************************/  B+ P1 o3 G/ R" g
  7. 5 `5 E& a/ |& E5 U) L
  8. /****************************************************************
    / _0 V- \& X5 B. h4 p7 B
  9. *                        Header include
    6 N0 K) b! T6 I7 u
  10. *****************************************************************/. u9 _# J0 b: R( W7 a* {/ Q! T, W
  11. #include "DateTime.h"
    4 R9 T7 L: _8 G5 y  k0 i
  12. #include <stdint.h>8 q$ W' l, L# j3 l, s) A+ f8 o( i( O
  13. #include <stdio.h>7 Q& _. l8 E, H% n  b
  14. #include <time.h>
    7 C3 F$ U5 t: |- b+ z
  15. #include <windows.h>/ K0 |7 Z# E% S! U7 ^4 Q1 t/ ]& C% y3 ]+ w

  16. + w2 H3 R" d' r! D9 e
  17. /****************************************************************
    # ?" ~3 Z5 k2 q+ m
  18. *                       Global variables
    & l' O- n( I/ _# m1 f% x2 O+ e" u+ y
  19. *****************************************************************/% J$ T; G7 d( J% O( C* l

  20. 4 f1 G* ?, q# }6 `

  21. ; D7 l  m4 Z5 {- ]/ m$ x$ m9 J1 v
  22. /****************************************************************+ Q! D; `1 M% Q9 S* M: i
  23. *                     Function declaration
    # A! s; Y, T! U* j7 J( a: B# A
  24. *****************************************************************/0 K9 c1 b- a5 b7 D1 g- X2 w
  25. static void gotoxy(int x, int y);
    ! A8 ]* s' M/ h' C

  26. 8 r) R$ H1 B" a" q( J/ \3 B. K  ]" q
  27. /****************************************************************
    0 w$ p% M' g$ x. x1 V& H
  28. *                     Function definition
    8 X3 S  d; i2 C0 j( E" I
  29. *****************************************************************/0 m8 B# P. k; r. Q' r! [

  30. 8 K. q( o/ t) V4 C; m# {: o
  31. /****************************************************************4 C" G$ d) W% p7 {% v# |
  32. * Function:    main
    5 K- h# l7 V2 m
  33. * Description: Program entry.+ q4 Q) Q/ w6 Z+ E
  34. * Input:, s- p! I8 o0 B% C3 T( S9 T
  35. * Output:( ^  d) C2 F2 m, r
  36. * Return:
    % f& v/ y6 K( a0 z" r& t) A
  37. *****************************************************************/" F2 V1 n- b* {
  38. int main(void)3 I5 N# H+ X: z" \( a
  39. {
    7 U% z5 O, u+ b7 D% n. R- T$ s5 q
  40.   for(;;)4 z6 b5 j; q2 Q) _
  41.   {
    ( K/ t1 ?3 Q$ s. m3 s; a
  42.     time_t        times     = 0;
    , f& D) Y; ^! l* _5 Q
  43.     double        mjd       = 0.0;
    & A0 c/ r7 T, d) o5 v( V- c$ q
  44.     DateTime      utctime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};& H; {/ @! V$ H& Z0 |
  45.     DateTime      localtime = {.year = 1970, .month = 1, .day = 1, .hour = 8, .minute = 0, .second = 0};  l7 J% ~" u# o" q
  46.     DateTime      gpstime   = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};) ~/ ~. |; r/ ~! \- C
  47.     GpsWeekSecond gpstimews = {0};
    9 P: T* q# O1 ?; z6 P

  48. & W2 Z& S2 s. _9 f3 P+ v4 ~/ r! h/ x% N
  49.     time(×);
    , Y) t7 W- r6 v5 Q  z4 {  E% w( O
  50. " I' p; J' ~5 R* L) S
  51.     if(times > INT32_MAX)  \; i! f0 \3 R5 a. l  \- c1 e- }
  52.     {
      |9 ^! \  o& z- k: h0 q
  53.       utctime = GregorianCalendarDateAddSecond(utctime, INT32_MAX);/ O5 Z* s2 \$ r8 J$ e4 H
  54.       utctime = GregorianCalendarDateAddSecond(utctime, (int)(times - INT32_MAX));
    ' e1 e5 k1 N* y6 m8 T
  55.     }
    ' H0 T+ H, Q& a
  56.     else; m" ^: B! V  W6 J
  57.     {
    - c* a4 z. V5 j4 G# g6 c: l5 L
  58.       utctime = GregorianCalendarDateAddSecond(utctime, (int)times);* o- d& [7 `1 ]  F: c0 h
  59.     }9 H0 g  J- ~$ {" F4 I
  60. : j" e/ f& e  ]* x7 ]
  61.     mjd       = GregorianCalendarDateToModifiedJulianDate(utctime);# q4 o! t. n% |( [' l9 B- P
  62.     localtime = GregorianCalendarDateAddHour(utctime, 8);: X% C% ^7 I$ C5 ?
  63.     gpstime   = GregorianCalendarDateAddSecond(utctime, 18);) ^, e6 u6 C7 M; L! J- |
  64.     gpstimews = GregorianCalendarDateToGpsWeekSecond(gpstime);
    2 S2 h% Q5 y: j! q: F
  65. 8 ~0 o) ]7 s- H: V4 a" C
  66.     gotoxy(0, 0);. t# R) j- E4 O
  67. ; _+ ^7 S6 s4 a" h, J# a
  68.     printf("Local | %d-%.2d-%.2d %.2d:%.2d:%.2d | timezone UTC+8\n",
    9 K; d- m* p1 s, C& Q+ ^7 z" M
  69.            localtime.year, localtime.month, localtime.day,6 {* c( ^+ _) v
  70.            localtime.hour, localtime.minute, localtime.second);
    % K$ m3 N4 z& d+ Y& }3 N$ j

  71. , o# u9 z- Q# k2 Y
  72.     printf("UTC   | %d-%.2d-%.2d %.2d:%.2d:%.2d | MJD %.5f\n",
    / M/ I5 I  o0 _
  73.            utctime.year, utctime.month, utctime.day,* s3 |/ D! }5 z1 y5 v* q) |7 ^
  74.            utctime.hour, utctime.minute, utctime.second,; X6 L% S; G0 c! |6 E' }/ }
  75.            mjd);5 s! S0 E! U% v

  76. : S8 ]- B; B1 x- A( Q4 }7 }
  77.     printf("GPS   | %d-%.2d-%.2d %.2d:%.2d:%.2d | week %d %d s\n"," r% M  r) t9 _0 c$ M
  78.            gpstime.year, gpstime.month, gpstime.day,% n; ~, }- u  v8 c2 E0 p  z
  79.            gpstime.hour, gpstime.minute, gpstime.second,
    * o: m( j1 J0 }
  80.            gpstimews.week, gpstimews.second);4 a6 [: e3 \# B
  81. 3 J0 |  Z5 _* ~( k
  82.     Sleep(100);7 ]: w$ j% W! ?" A# c+ d% `
  83.   }  j& V6 D/ @6 g( M6 v
  84. }5 N$ m# P' q$ G. ]
  85. * c9 C6 `1 W' _- }
  86. /****************************************************************1 x; t% y, w0 t- ~* ?
  87. * Function:    gotoxy
    6 U* v" ]% g+ P/ F4 S
  88. * Description: Move the cursor to the specified position on the text screen.
    - X% x$ y6 A! m: s) J# b  w8 g8 x
  89. * Input:       x: X axis coordinates.1 |! Z1 W. v+ G. V" X
  90. *              y: Y axis coordinates.
    * i0 m' d+ O9 @$ o8 T
  91. * Output:; \9 ^$ t9 }9 `/ P4 I6 m) @: ~4 f9 @
  92. * Return:
    ) \/ t( ~8 J6 `( _( o, r. @* M
  93. *****************************************************************/
    * s5 O1 F" o9 k- Z# U9 P
  94. static void gotoxy(int x, int y)8 G% O) u5 t! {- C
  95. {# q0 B: p7 _6 E2 K
  96.   COORD  pos  = {x, y};
    0 }# m% i* ~5 T! k+ V9 V
  97.   HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
      ?! ?3 y' b7 {0 ^! h0 i  m
  98.   SetConsoleCursorPosition(hOut, pos);1 \, r$ F5 I# z
  99. }6 G& j1 Y/ `* z, s4 x+ B2 L1 a$ b
复制代码

; ?" _) `2 T& ?1 j3,运行效果3 I# d7 e5 `: k7 B" H; e3 H7 ?
RunningResult.jpg : F5 @" ]2 k. ]# m  Y+ C
' G" I8 r# U6 [( {+ L9 l( ?
收藏 评论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 手机版