|
GPS,UTC和本地时间的显示器/ a9 f: n+ z( p" d
: I5 @* C" ^" o% c1 U转载来源:GPS,UTC和本地时间的显示器& v! l P/ M9 r% A
0 l0 N& E: J3 p* N" cGitHub仓库:http://github.com/XinLiGitHub/GpsUtcAndLocalTime
" Y R. ^8 n. h; }0 EPS:博文不再更新,后续更新会在GitHub仓库进行。0 B) Y+ ?2 [+ Q" f! Q- Y' |
q3 r0 A% G7 D n4 e" k
GPS,UTC和本地时间的显示器。程序中涉及到朱利安日期的转换,详细介绍见维基百科[Julian day](http://en.wikipedia.org/wiki/Julian_day)。
Y Q- u( t6 c, [9 \1 B |2 c2 c5 L! H! ]8 T" A! M( b! w
1,开发环境* \! N- L1 W% \" u
1,操作系统:Windows 10 专业版0 R6 e, L# `- {
2,IDE:Visual Studio 2015 专业版2 ? f( Y( G; K+ a, o" Y; `
" Y' [9 ^5 }6 }% R
2,程序源码2 i7 V _2 `0 E& Z7 v. g
DateTime.h文件1 P% f( X* k" s: O) Z
( q7 w+ y# E/ P; z
- /**************************************************************** w( l; H: Q9 b* v
- * Copyright (C) 2017, XinLi, all right reserved.4 h8 q$ f: e. p8 s0 i
- * File name: DateTime.h
; U- Z r+ X9 t) T* r9 L, w/ H& B3 S - * Date: 2017.10.17
0 { L/ R# z2 k! S7 H, N5 p - * Description: Date and time module header file.
$ P ~6 [6 l7 I! E+ W) z4 A9 T' g! v - *****************************************************************/) I, }- Q5 s3 l; w
& _% E0 \3 f ~* c& i( O! t- #ifndef __DATETIME_H. U$ D6 z, h C; u/ }% ^; i& @ u
- #define __DATETIME_H
, G, K. r% m. H7 E( r - 4 i: D. d- z6 S: Z: _
- /****************************************************************
" w. @, z, k' V5 K3 Y$ k, G( E& {! C - * Header include
9 W1 B7 w( J% ^9 L& m1 j P4 u - *****************************************************************/' v( Z) f9 |: {5 ?/ H, ~
" C. O* N8 Q4 ^& w ?) y; L8 i, `' t
, ^1 B$ P, y- @% s9 t- /****************************************************************
0 A9 J3 t) k* U: g- H3 s - * Macro definition1 o6 z. P* _" Z* J, c3 F
- *****************************************************************/ e& d& T `! U; x
- % _7 `$ u7 Z4 S5 L+ T
- 4 L5 J' B% G2 L: Y) c8 R
- /****************************************************************; o L- c9 V! G# R
- * Type definition
9 w& K! {7 R ~9 k5 t8 m" s - *****************************************************************/
- g5 V; Q% Z' R* U+ x+ q - " O9 w* \$ `+ j0 M6 a& X" D% A# V, W
- Q) b" ~ w( J& h* U- /****************************************************************
2 _' M! r) p5 G: H - * Structure definition1 _, a/ h" }* k
- *****************************************************************// `2 ^/ f) H3 ?4 P' ^. g
- typedef struct
" I5 K. H. |6 J0 u - {0 K/ h! c# Q/ t6 N- h3 ~+ h' i4 H
- int year;# I; h' h" O- q
- int month;
9 w; G% ?0 I* n4 I( {9 S; T/ | - int day;, C6 O9 o9 {- X" m5 ~; f5 \
- int hour;% Y2 w& O, x% v/ T
- int minute;3 o2 Q5 f) [+ P4 H! P' X/ A% W
- int second;5 V" X" {+ M& K8 Z: B/ W. k/ \6 @
- }DateTime;
; Z; V2 i2 \1 [( v% k1 Z" f
9 u6 J' k- Q7 h% x2 B+ q- typedef struct
$ w; W8 e. O6 T# ^3 j - {5 k; y7 A& k0 ^
- int week;+ X6 y# I' O6 ]% z" @
- int second; y: V# d* q* F% \* F0 e
- }GpsWeekSecond;: G3 c$ X) { R2 Z% q9 ~
- - i/ K3 i* e! I, F' Y5 a: M! M6 O
- % e. m I8 s& x$ J. N, L
- #ifdef __cplusplus4 t3 Y- Z. Y! _: i$ S! L
- extern "C" {
. {! r: x7 M! E/ J. u) e - #endif /* __cplusplus */
; D. |8 \7 O* ~/ H$ w
; E( w6 B* o6 U7 d- /****************************************************************4 Y, I4 T! p5 b; c# ^+ E& S& ~
- * Variable declaration' X; {) ~0 C4 m% l4 @& r
- *****************************************************************/# b" d+ x1 Q- m$ r; h
% [$ k6 s5 a3 m- a0 G! s) g7 }6 d- . ?. s1 n7 E" n/ v& c' H$ f, y1 D7 B
- /****************************************************************; h2 i- @ `9 y* ~- |. t4 v' L
- * Function declaration
" e: m1 M& L0 G) n - *****************************************************************/, y2 {' y; L% s4 u6 A, Q
- DateTime GregorianCalendarDateAddYear(DateTime time, int year);
1 @4 \. `& V, Y1 j, W& e& b - DateTime GregorianCalendarDateAddMonth(DateTime time, int month);
o- \* T. |$ P/ C - DateTime GregorianCalendarDateAddWeek(DateTime time, int week);9 p* Z9 B" I2 v
- DateTime GregorianCalendarDateAddDay(DateTime time, int day);
/ U1 ]. y& v4 o - DateTime GregorianCalendarDateAddHour(DateTime time, int hour);
& v+ `: b" y7 A' f' ^8 B0 g1 ^3 z - DateTime GregorianCalendarDateAddMinute(DateTime time, int minute);5 u/ c- Z8 y$ |4 F
- DateTime GregorianCalendarDateAddSecond(DateTime time, int second);
4 \5 F) E. x: I2 |! v6 v, e - GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time);' ~9 W. t: x* y7 X* Y9 @, U% G
- double GregorianCalendarDateToJulianDate(DateTime time);
1 T1 a1 {% \1 D) ~; z. M+ B - double GregorianCalendarDateToModifiedJulianDate(DateTime time);2 |* S; S/ L8 h! j
- GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year);: e, A& [" V) N" {% f' r
- GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month);
% D! c# Q9 O) d - GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week);4 w2 n; s- w9 o& m# S" H* Q8 ?
- GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day);7 g( x9 m0 `9 L( w9 K" s; z
- GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour);$ M1 d$ U' V+ `( z! b5 [$ S2 [& u
- GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute);" F% ?3 f' g) ?0 ^3 {0 P% v
- GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second);. }! y# y, W/ p( y
- DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time);, ~4 C! L! ~* h
- double GpsWeekSecondToJulianDate(GpsWeekSecond time);* O& X$ L- C* }( S9 q. w [/ ~
- double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time);
6 J1 S& f B% i7 I0 w& o - double JulianDateAddYear(double jd, int year);6 o7 H5 h4 T$ _1 ^ v! p1 w
- double JulianDateAddMonth(double jd, int month);
' E5 Q# y; _ R) O2 ? - double JulianDateAddWeek(double jd, int week);$ g* v$ _9 J- w8 f- g l
- double JulianDateAddDay(double jd, int day);( R1 I5 T/ {" N6 }2 g- N, c
- double JulianDateAddHour(double jd, int hour);
* q) x: C- ?9 p: t! A2 r - double JulianDateAddMinute(double jd, int minute);
1 }0 p6 O2 O4 `# u) o; n - double JulianDateAddSecond(double jd, int second);$ a3 q! u& a9 A! T) n, L
- DateTime JulianDateToGregorianCalendarDate(double jd);
/ U7 u+ O; s. a8 s9 L* F* M8 M - GpsWeekSecond JulianDateToGpsWeekSecond(double jd);. W/ [6 w: o/ \! d0 n
- double JulianDateToModifiedJulianDate(double jd); R2 e$ N4 Y' E J
- double ModifiedJulianDateAddYear(double mjd, int year);0 d7 X2 {; \3 ^; q" v
- double ModifiedJulianDateAddMonth(double mjd, int month);
: w2 t9 m7 z- M9 ?! ?3 U - double ModifiedJulianDateAddWeek(double mjd, int week);$ S) d6 _3 V0 q! B. P
- double ModifiedJulianDateAddDay(double mjd, int day);- v% z- U; d) ^4 S9 H* P: G
- double ModifiedJulianDateAddHour(double mjd, int hour);
# b7 j% r* X+ o" y+ }6 v+ ] - double ModifiedJulianDateAddMinute(double mjd, int minute);$ P' \" B5 l) q4 n6 _/ @/ r
- double ModifiedJulianDateAddSecond(double mjd, int second);, z! G: K4 l* i% o) z/ |
- DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd);
- ^# i+ S4 d a - GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd);
3 D: A: {, A: y8 z( ] - double ModifiedJulianDateToJulianDate(double mjd);
9 H' h/ d( Q4 t6 y; c - / F0 y' L$ p7 U- c4 b
- #ifdef __cplusplus
# ^1 u0 ~3 b' ~4 { - }* b" H9 Y5 |) h! W( `
- #endif /* __cplusplus */1 n0 [; `" S9 s: ~
- 5 }5 g* j- k1 A9 k% b( I
- #endif /* __DATETIME_H */' L* k. w7 ~& M Q0 b
复制代码
. |+ V7 b& Y3 V* \4 H( ~ DateTime.c文件 G6 {9 b! i$ c+ f- g
- /****************************************************************/ z" w2 C p1 j% L
- * Copyright (C) 2017, XinLi, all right reserved.
u6 q+ ^- k& D, ~4 C* N# R) k - * File name: DateTime.c% y! K2 P( K) G8 B$ h
- * Date: 2017.10.17. t1 H% b$ Z6 q% ~$ J ]" I
- * Description: Date and time module source file.
+ l6 O+ T1 Y% B# E* X/ w3 H- s - *****************************************************************/
! G& X9 n! u; B. q
$ q6 J) A4 h) f. b- /****************************************************************
. l8 H4 H9 Z$ m - * Header include% B1 @0 G0 K) X% U* Z
- *****************************************************************/6 a0 ?# v) O, d1 y+ z. m
- #include "DateTime.h": J1 }2 [% t7 r! l# F+ R1 E& p
- C4 C ]) k( w! R& [- r
- /****************************************************************
! G- R4 J8 E. t8 q+ c - * Global variables0 Y( Q8 B, M! O" C g z
- *****************************************************************/6 [! N+ W! h2 c
- 2 G7 h2 Q+ p& |' l+ V! \
- . z) Z. I" d& T9 u& p
- /****************************************************************
{5 ^4 L9 @ f' {% t - * Function declaration
* r& s/ ~# p* \' q - *****************************************************************/
F, V- T0 s& N - 5 j: M* P+ b$ q# j" t/ w
- # e7 f$ h/ f2 q' v h
- /****************************************************************8 z+ O5 o% S$ A8 t
- * Function definition. l! n* Z# q2 _% I
- *****************************************************************/
5 ? t0 `) t% Q8 ~ z - 4 A( h( ~8 F* T) u
- /****************************************************************2 i: d6 B* S6 D, j
- * Function: GregorianCalendarDateAddYear
1 M# t# E% }+ x4 i - * Description: Gregorian calendar date add year.
- J4 {& n0 Y, t - * Input: time: Gregorian calendar date.
+ o% q9 y3 [+ p% c" u" m - * year: The number of year to add.8 U ^4 R+ W% a: r/ U" b; s2 D) s' \0 C
- * Output:
2 e( S* ~0 p1 K$ D) ?) b6 v7 j - * Return: Gregorian calendar date.
6 i/ U* k, T* Y* N; E% E9 l3 [ - *****************************************************************/9 N/ K2 o0 F0 h
- DateTime GregorianCalendarDateAddYear(DateTime time, int year)
& k" x8 C' H! i2 { - {. h2 M/ k5 K/ p q: [9 C# X
- time.year += year;" q# q5 g8 k' y! T
1 a; ]) v. _, i- Y% c- if(time.month == 2); ` k3 {1 z; W; U, f* ]
- {
$ b4 T* [6 Q- [$ K5 h4 [ - int mday = 0;! u; D( p% _ t
- / U. [# o& F( M- T$ v
- if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0))
- A* P. ]6 C0 ^% L$ J; G - {
3 m$ Z4 F" s+ `" A! j4 c1 D) U - mday = 29;
5 C! n! l: Z% l. k! a - }. Q" g3 y$ R2 i0 T9 W! f' B
- else
, G; m4 v6 o8 Z - {: z9 W6 w% O1 z; h+ b0 D
- mday = 28;8 C: Q- n% z% h5 `! m
- }
7 n' v* K. B) P* w: w - : m3 l! i% g t# r* c/ b1 \! Q
- if(time.day > mday)
5 I7 p- ]* B0 |. K/ n7 { - {
: U/ R' i! t% C2 y" t6 e$ b$ q - time.month += 1;
+ c2 I: b8 Y! |7 } - time.day -= mday;# ]+ P3 T# y9 c% q( H& O; X2 u
- }
: B2 R8 V- T0 y - }
% I4 U5 y( |7 ? g9 x$ H - ; i; q8 u! u7 e7 _
- return time;
% A/ E M; z9 w) \ - }8 b' @2 S) K3 o, @& f; ]
- 9 h' h, F C2 S( }5 `- u
- /****************************************************************
# g4 I* n* o; S8 N' u9 ] - * Function: GregorianCalendarDateAddMonth
6 y4 V2 r0 ]; q: a6 k, k; ~ - * Description: Gregorian calendar date add month.
! M L& n8 W2 d- O4 y" [6 S! B& y - * Input: time: Gregorian calendar date.
( ~& Y. c6 G3 T; c; d - * month: The number of month to add./ `. n" h* W# J; B# s* `' W
- * Output:
8 s4 {' W* y& w+ F' q0 R - * Return: Gregorian calendar date.7 N h( J8 ]2 E
- *****************************************************************/# W, G! ]* S0 s. u8 y- Q
- DateTime GregorianCalendarDateAddMonth(DateTime time, int month)
6 ^9 G, R2 T7 J/ ~1 u+ s1 I) J - {' g: D! a& Z" H$ U8 k5 D3 }
- time.year += month / 12;
( h6 ]! l T7 a3 Y - time.month += month % 12;
) @' E. ~1 W. f$ S. E5 H/ O - 7 T' s7 ^- R2 R/ t9 B9 c
- if(time.month > 12)- v, }( D: r# g( Z
- {
' u9 v# A" e0 [$ q1 J! K - time.year += 1;4 H# r o# ~0 u6 J& D
- time.month -= 12;
+ |" Q( L+ K4 y; _3 M8 ]& R - }2 D7 G1 L3 a9 I. B6 `4 k. J% B
P& b1 U7 G; U- int mday = 0;
i) U/ z7 k% g# p" i( _0 u - 7 [- }4 u5 o/ N, i2 p1 C3 j: A
- if((time.month == 1) || (time.month == 3) || (time.month == 5) || (time.month == 7) ||
0 w+ v! q# z) A, l/ [8 e - (time.month == 8) || (time.month == 10) || (time.month == 12))
: V7 r7 q5 W( R# s6 I) B - {2 A& k4 y: M; S$ m6 a Z# `6 M
- mday = 31;4 w8 W5 L. Z) x
- }& {. ] H8 h W1 ]3 s: V; v3 v5 y
- else if((time.month == 4) || (time.month == 6) || (time.month == 9) || (time.month == 11))
7 N+ m' X% o% H1 {( e5 I1 V7 o! R - {7 K+ s! O" p9 U2 w/ A+ I
- mday = 30;
5 F* v h- H* o1 [, n - }
$ I7 P( Y$ ?) w9 q6 O% r - else
: o: b4 n( U+ b+ W4 C - {
: Y5 _4 X7 [5 W& `8 j7 j4 m - if((((time.year % 4) == 0) && ((time.year % 100) != 0)) || ((time.year % 400) == 0)), \4 B) V. B$ R8 h- J0 N9 ^5 V. N$ U: W
- {
! p: U: s. C" N. U" a - mday = 29;
@" ~$ J0 `. n( h# s - }
" l4 q) N+ B6 @: }/ S - else3 z( P) q+ _& @# Q7 D: J n
- {
! r- I; _6 \5 h, p3 D - mday = 28;0 g4 h( ?) C7 H. t) f2 y
- }
- u* }6 S% F) O - }
3 u5 W$ L' W ~; u5 n* Q - ; `2 I _) h+ v. S9 r
- if(time.day > mday)
3 H# E& Z; _: m% }2 T" \* { - { Z+ E' A' F& d. E. P: _
- time.month += 1;
6 b. O# I* ^7 A; o# R - time.day -= mday;
1 L/ d/ l2 E/ V( e, O) E: j - 9 {$ i8 L4 e( K
- if(time.month > 12)7 @# O# D6 @( G8 `3 h4 b2 L+ M: G
- {) w n' A9 ]" w; F$ k( A3 K; F
- time.year += 1;
( s0 Y R# _! }% M( t; Q, v - time.month -= 12;
}5 U2 e9 D3 K' K - }8 m# b; Z% T! V+ [/ M* N
- }
# c: a# h Z+ C( B* `0 B - + P" C8 S4 Z& Z) t
- return time;
& b' O; A7 S) p% ^7 n - }( V# [* X: T1 z) ?6 G( U4 S O
- 1 U0 X6 Y+ H$ q% [6 P
- /****************************************************************
& S# _. C2 F% c- o+ |1 q8 `( A - * Function: GregorianCalendarDateAddWeek0 v/ m0 x" \2 v2 s6 L& N e, c
- * Description: Gregorian calendar date add week.- ]1 h3 T% ?3 s5 ]! X+ z/ t- V1 Q. ?
- * Input: time: Gregorian calendar date.+ D! A j r5 L" k) l9 g
- * week: The number of week to add.( K6 P) k! p" O* d1 Z# n$ s
- * Output:
! A7 y1 f% N& g/ F5 M w5 B: a - * Return: Gregorian calendar date.+ ?# {9 F5 F9 l' U. q! D' d
- *****************************************************************/
! X5 z# @% { H8 d( F' W/ B# h8 { - DateTime GregorianCalendarDateAddWeek(DateTime time, int week)
) d$ v) Z) ]7 ~! Y0 q2 O! j - {
/ r# X+ }6 L4 z1 Z: h+ q6 U/ d; C - double jd = GregorianCalendarDateToJulianDate(time) + week * 7.0;4 p( m7 t: m9 T& D6 D! t3 B8 _
0 y- c0 d9 Q0 f7 U! Z9 I- return JulianDateToGregorianCalendarDate(jd);
5 {0 I7 c6 `# M. Z M - }% W( z" m) t0 l* q
7 Y# S4 X' G y# J- /****************************************************************& Q F3 d( [8 p) Q7 M/ B
- * Function: GregorianCalendarDateAddDay( E. K, Q2 @/ @0 Z2 Z
- * Description: Gregorian calendar date add day.
0 e! r. F/ Z( l% T# A - * Input: time: Gregorian calendar date.
$ D. [5 i4 u( M) M+ g) J - * day: The number of day to add.- ?2 [# Y1 X: v, a4 s! B' y/ p
- * Output:# t! C N" M$ ] y L& ^7 I+ w0 d5 Z+ j
- * Return: Gregorian calendar date.1 C( |2 ?( j) @5 f
- *****************************************************************/
" L, w0 r- O2 v: Z$ q - DateTime GregorianCalendarDateAddDay(DateTime time, int day)
0 c% x; D0 V4 ^) _7 G9 I - {$ B F0 G) z, ~# q) S
- double jd = GregorianCalendarDateToJulianDate(time) + day;
7 y, q0 W: j* S' ]% V( D* a0 g0 V- n - * H8 J. R2 L' c( {% K
- return JulianDateToGregorianCalendarDate(jd);
. e- b- V0 p, y: p7 Y2 g- q/ i - }
& Z5 w/ a4 e% s* ~
8 q* b' E/ r: j4 M" f& F3 Q) r; ?- C1 E- /****************************************************************, C5 X8 H% n1 o7 S5 }9 ^( K0 d) x
- * Function: GregorianCalendarDateAddHour
( _ P+ A1 {* s+ p# v - * Description: Gregorian calendar date add hour.
# r" l8 W9 X& n8 U4 @3 H; P4 m7 H - * Input: time: Gregorian calendar date.9 b' l1 a a& m) H7 g) Y4 e# @4 D
- * hour: The number of hour to add.' q) g: W1 j" K* q5 e) D
- * Output:6 a7 a5 d0 g& K* ]
- * Return: Gregorian calendar date.. w) Z1 z" T$ f- ^6 g/ [# ^! \
- *****************************************************************/
# o9 u }9 l# X* J! _ - DateTime GregorianCalendarDateAddHour(DateTime time, int hour)
# U4 M. I$ F7 Z* w" p# ^ - {/ Z+ u! q9 ^( A2 n1 E6 O# m1 ?7 [+ B
- time.hour += hour;/ A# d+ P- b# D' _1 r
- ; k' S6 c/ K/ t7 d! w
- double jd = GregorianCalendarDateToJulianDate(time);/ ?: @2 m5 {1 F; Z, S- u
- : G3 p# B9 u+ J; L9 [4 j
- return JulianDateToGregorianCalendarDate(jd);
8 y7 N% `3 d/ V1 C" ~4 W - }
3 P' X9 t4 u/ [& k U( R
9 w) @4 Z' y% g1 N( ~- /****************************************************************+ R% }6 q, M2 U) o o8 Z
- * Function: GregorianCalendarDateAddMinute
! o& G6 a! Y- m/ O. Q, { - * Description: Gregorian calendar date add minute.
* v `: w$ O# p( F) h: e - * Input: time: Gregorian calendar date.
+ R5 H) e5 Q/ _: i: r2 U - * minute: The number of minute to add.
6 {: Z2 ~: b6 Q( l* N - * Output:
. n/ B# P7 H2 ?) O - * Return: Gregorian calendar date.4 c$ Z2 b. Z* S! t
- *****************************************************************/
5 V3 a5 [7 v% P" D1 g - DateTime GregorianCalendarDateAddMinute(DateTime time, int minute)
9 R( {1 Y0 }5 `4 `' F - {: S7 G, C; A9 }' i7 y; |
- time.minute += minute;
9 e8 x( i* n* { [ - 4 p( Z. s. ~% B0 Y; N1 L
- double jd = GregorianCalendarDateToJulianDate(time);
8 Y# W, b* Q" N& z4 B9 S - % T8 H' T, ]0 B% b8 z5 i
- return JulianDateToGregorianCalendarDate(jd);7 `( e$ ]4 m) |+ V/ v
- }
9 V4 T9 ]) x) J/ a
+ _3 @* W3 K+ o3 ^- /****************************************************************
0 ^2 {- H9 J$ y. J0 e6 o - * Function: GregorianCalendarDateAddSecond
" c3 l X4 M8 Y2 v: z9 E! q- m - * Description: Gregorian calendar date add second.: N m3 F& w0 ]7 W' w h
- * Input: time: Gregorian calendar date.
$ T* h# i3 N1 ~( ^$ k- m6 c) x - * second: The number of seconds to add.
. I, b: x* t. B5 f% L% n2 v - * Output:5 B) p% p) Y% h" F1 I; S7 N- G
- * Return: Gregorian calendar date.
& X3 G# \* v, Z. F9 G* s - *****************************************************************/
8 P. V* ~7 N4 ~" \2 @. x - DateTime GregorianCalendarDateAddSecond(DateTime time, int second)
4 e' s* t' N3 d - {
2 _ O" ^9 H! E' S) \5 l. x - time.second += second;
: {8 Q5 E2 k% P, m; l
- T5 P( L# u [. u% P/ z; q: W- double jd = GregorianCalendarDateToJulianDate(time); e- k2 q& W, f/ m& N% W
- 9 j2 e9 ?2 N& w, G
- return JulianDateToGregorianCalendarDate(jd);2 ]- c+ q. d- o
- }
( Q! `2 {2 }; [) J6 k( X5 B [ - 3 Y% y7 o1 G1 I
- /****************************************************************
% W/ G; }9 a2 r6 h; X5 Z0 |* d - * Function: GregorianCalendarDateToGpsWeekSecond, |3 ]$ x- z5 J O& t
- * Description: Gregorian calendar date to gps week and second.9 i# Q. H) ~, J# h" h% h# v4 b' X+ \8 k
- * Input: time: Gregorian calendar date.
x9 {' a) w) B2 g5 C3 k - * Output:
# ?/ G6 [, L3 A2 C5 U - * Return: Gps week and second.
! _5 I7 h5 K& w* W% _" _6 V - *****************************************************************/; I& Q/ o7 w% b8 D2 E! d. ]
- GpsWeekSecond GregorianCalendarDateToGpsWeekSecond(DateTime time)
# F& n% g; z: f. Q - {2 T( O; `0 {4 a- g: h& _
- double jd = GregorianCalendarDateToJulianDate(time);
6 L8 D- o- `# i1 |1 Z3 G% ~
% u- K! o/ ]7 ?4 j) M0 o) E- d9 @- return JulianDateToGpsWeekSecond(jd);
0 o! ^9 t5 Y7 _: ]' T - }
3 ~9 H* v$ p [. v6 D' K - / ]( Z& z5 D& {' Z5 s7 q
- /****************************************************************% L! L9 b& t: z5 F t. B, @3 N
- * Function: GregorianCalendarDateToJulianDate
; u/ E N& {- j+ P2 | - * Description: Gregorian calendar date to julian date.
+ b+ j6 k/ J( j2 |' ]) Z - * Input: time: Gregorian calendar date.$ ^1 N( `! r& Q5 S4 ^
- * Output:
8 l8 d2 j, y$ j% O7 q, Q - * Return: Julian date.
1 Z {, R* B4 y" O# a8 D3 } - *****************************************************************/
9 n4 v. W% b$ q, ]: D5 F5 M: L2 w- { - double GregorianCalendarDateToJulianDate(DateTime time)
4 u/ Y: r* [. u% U9 M f - {
5 z5 [+ ~; S) O$ F& i - int jdn = (1461 * (time.year + 4800 + (time.month - 14) / 12)) / 4
* J' |. a1 P/ X - + (367 * (time.month - 2 - 12 * ((time.month - 14) / 12))) / 12
' ]' A- K/ e4 {% s - - (3 * ((time.year + 4900 + (time.month - 14) / 12) / 100)) / 4
# }2 r6 x$ }" q; I - + time.day - 32075;) u- w0 m% t$ L6 O! j
- 1 K% G* x( R/ B; w- D$ n
- double jd = jdn + ((time.hour - 12) * 3600.0 + time.minute * 60.0 + time.second) / 86400.0;
" s( S* H' J+ L5 ~" V; o: C
& w0 C: |( w" ? O' j- M5 j9 I) u, g- return jd;1 V3 J2 t" l1 k: X# c' h
- }% K2 a% U W! [- k. b1 s
- , R1 Y2 k& X" e8 L6 a* {2 k' k" ^
- /****************************************************************
: C7 u5 v7 P5 U e, Z1 Y6 D# X+ { - * Function: GregorianCalendarDateToModifiedJulianDate
" I* ~! _ d* {: s - * Description: Gregorian calendar date to modified julian date.5 i+ b+ q) s7 L
- * Input: time: Gregorian calendar date./ q- v4 y; ~ @
- * Output:
5 w( a( f$ P$ O" ~0 V - * Return: Modified julian date.& D; u/ Y% l# l2 s9 P% Q
- *****************************************************************/- {% c- Z' [9 R
- double GregorianCalendarDateToModifiedJulianDate(DateTime time)6 z! \% q5 h8 d! x& J; G' F
- {
; n9 S# J( @7 n# q' e" f! I - return GregorianCalendarDateToJulianDate(time) - 2400000.5;/ |$ |; i' K. f% v: g
- }
; M: A* H' o5 B- @/ G
1 W" X" k4 G8 b: Q- /****************************************************************
: D' X/ }8 ?0 T/ ?5 v r% J+ V - * Function: GpsWeekSecondAddYear' X( ]1 ^ a" X3 Z: x
- * Description: Gps week and second add year.
1 z9 S, L* f5 _/ D, c2 i1 S - * Input: time: Gps week and second.+ x' {; ]- r( N! q
- * year: The number of year to add.8 I3 Q/ O! W [1 C- I
- * Output:
" a4 ], i2 n, O3 I9 i m: p - * Return: Gps week and second.
% o6 |; |1 Z' u6 e/ e) i, i2 [ - *****************************************************************/
. c3 }3 O* B6 i6 m+ j' ]5 ^ - GpsWeekSecond GpsWeekSecondAddYear(GpsWeekSecond time, int year)
3 z" X( a( g4 g3 Z" f - {' r/ K6 N& o* _: z9 N, x& }" Z6 @
- DateTime date = GpsWeekSecondToGregorianCalendarDate(time);# Y' g: M/ U2 } b& M1 ^( H. T
4 N3 |3 E" L! v$ g! E- date = GregorianCalendarDateAddYear(date, year);; N' `) a7 [, Z$ {
L( g: y, r* v' M" ]2 [- return GregorianCalendarDateToGpsWeekSecond(date);# \3 } Y( w' X3 J. Z/ }3 g- \( h
- }8 z: O& I' [$ M. m. `
9 t: U) x p8 H1 T6 Y- K- /****************************************************************
0 I0 f# S1 Y+ g# [1 ~& P# w0 P# j - * Function: GpsWeekSecondAddMonth
6 c m7 N% g1 |0 B; c - * Description: Gps week and second add month.* t! v8 U. T6 X( [
- * Input: time: Gps week and second.
* ^, N& p- F$ O3 ~! y0 J - * month: The number of month to add.
# a! f# Q& B0 J: B: S& y/ e, S, r - * Output:
5 [: I5 H( _2 Y9 }3 @5 Z - * Return: Gps week and second.
! T& P8 \- d: }( R - *****************************************************************/) b: e( x4 {3 J& Q
- GpsWeekSecond GpsWeekSecondAddMonth(GpsWeekSecond time, int month)
- H: t; H0 p1 T - {4 P# C5 {! L. F8 d. d7 Y& [0 U. B
- DateTime date = GpsWeekSecondToGregorianCalendarDate(time);' z2 O# s; U$ a+ z: m5 f/ q
- 3 V- R- S% ^) w1 \( O8 v; _
- date = GregorianCalendarDateAddMonth(date, month);
( x; q) _9 a: g0 i8 Y
' Y4 K+ l( ?- M* X- return GregorianCalendarDateToGpsWeekSecond(date);
1 u; g: v. N1 ]4 v5 p - }( g- ^' j+ k: G
- " m4 l- j8 t; K+ w8 ^6 P! G& ^' z
- /****************************************************************0 ]$ z4 T9 ~; u4 a5 L
- * Function: GpsWeekSecondAddWeek/ a6 ]$ D$ ~7 M: ]- y
- * Description: Gps week and second add week.
, U. y( E0 i1 {5 E A5 ~ - * Input: time: Gps week and second.6 l9 ?* p# l- | N
- * week: The number of week to add., }* U# g/ U* {7 p5 y; e1 } U
- * Output:
3 Q1 T; {* i& G; X - * Return: Gps week and second.$ U& \- q" x! v, K" {+ F
- *****************************************************************/; q0 ? C% E' w0 e& d
- GpsWeekSecond GpsWeekSecondAddWeek(GpsWeekSecond time, int week)2 G- ]+ V" O, u- d2 B6 k
- {
" [" ~4 k$ _. ?1 c' B; h/ J - time.week += week;: J7 x1 K# f( U. C; A
. D$ _3 J6 ~* a& E1 o" Y; N( ]( ?- return time;* E3 `0 G" d( f" Z9 K( W
- }. |0 b6 y1 S- R, v
- 8 y! W. U1 I- i. [6 V% f. m
- /****************************************************************
' q( V: Z/ C! d5 b - * Function: GpsWeekSecondAddDay& N4 Q9 E8 h% a' I
- * Description: Gps week and second add day.8 ]2 M& i# P, \( A& N* `
- * Input: time: Gps week and second.) Q3 O$ r+ Q, x8 ]& Z
- * day: The number of day to add.
- r/ `/ X$ q* v7 u - * Output:7 H8 S, M, B" `' M+ x
- * Return: Gps week and second.4 |) W# Q' A" O$ }: M
- *****************************************************************/
, t/ z0 {8 h& v/ c/ v7 K0 L - GpsWeekSecond GpsWeekSecondAddDay(GpsWeekSecond time, int day)* J: Q: @3 o3 ^
- {
1 k2 L* X* s) M/ Z1 S - time.week += day / 7;6 J( y: O& ^0 D. }+ P8 Z; d2 ?
- time.second += day % 7 * 86400;
1 C8 M0 R! Z" p6 L/ d- T! j - % h- P. U* Y: @' o
- if(time.second > 604799)
' e+ p6 t, E9 L - {
8 g* V7 _( W& Z( J - time.week += 1;# Y- P, c2 a6 Y. H
- time.second -= 604800;
- T& s$ ?3 d9 ~/ T4 _$ H - }, A1 p( m t. {- o+ H" p* Z
- , X3 k' H# b: J( N' Y1 k1 i1 k
- return time;
) A3 B( h% _4 y2 s, I7 ^* q - }8 G; y) Q( K: B# D% l# D
4 @7 z7 E; V) I0 J- /****************************************************************3 A1 M) A6 j4 i: L! B
- * Function: GpsWeekSecondAddHour& r) r6 ]( Z- H9 t9 h
- * Description: Gps week and second add hour.
* G& z2 y7 `% y, u - * Input: time: Gps week and second.8 @: J: S2 l3 A+ b
- * hour: The number of hour to add.( r6 L( |. h: g$ S A( }
- * Output:0 e4 d/ i# u7 e( k# W: H8 q1 c* Y% f
- * Return: Gps week and second." q" Q' v& C/ O) M3 ^( {6 u' y
- *****************************************************************/6 u) h% ]& m9 F$ g
- GpsWeekSecond GpsWeekSecondAddHour(GpsWeekSecond time, int hour)
6 G$ t$ S2 g& a5 Z( G/ P3 V - {9 ^" x8 v' @* U9 {, F8 [# {8 a
- time.week += hour / 168;" R: E, |+ V' F8 Y5 Q9 H
- time.second += hour % 168 * 3600;5 O4 x2 F' _- y) u
- ! w7 O3 Q2 x, l4 x: ]! K
- if(time.second > 604799)2 E# R, X) n5 Y$ e1 M* o
- {( t. u ?! I% i4 T. T* e/ d$ S
- time.week += 1;
1 z' N" Q" G# p2 D4 d - time.second -= 604800;
6 b( v, Z% w6 Y M. E0 ` - }9 z( f5 x% X- M& U( s
- " @/ C" Y0 U. O3 B
- return time;: J5 t4 x7 c+ j& Y3 q* @
- }9 T+ h3 \! q- L1 h4 \' G5 N
- . i @. b( l5 z$ Y
- /****************************************************************
4 s. Y# I4 g) l0 m7 L5 q7 v* ^ - * Function: GpsWeekSecondAddMinute4 Z; D! h8 K) x- I: {/ `5 Z
- * Description: Gps week and second add minute.
2 W# {* W8 G! p# o! X& D/ R - * Input: time: Gps week and second.
* d& f; V# t- F+ v2 f. v( o - * minute: The number of minute to add.1 i9 c9 q G3 p% i+ @( F& W: o
- * Output:
3 ?& ] @- P& \( U - * Return: Gps week and second.. K1 q6 X7 U7 [! J% T2 D. Z/ z) L
- *****************************************************************/
7 {$ A# [; G1 I5 X - GpsWeekSecond GpsWeekSecondAddMinute(GpsWeekSecond time, int minute)4 X5 ^% I. n% j+ e+ v
- {
/ W7 b% P' b) _# q& v4 T0 @; v, R - time.week += minute / 10080;
/ f# D& M6 T: g" N - time.second += minute % 10080 * 60;( L a" ], T5 A; [1 h
-
6 t, S; I, d5 w7 `: u9 N - if(time.second > 604799)
5 _% w' J8 O1 ^; g+ V - {! P! _5 z" ^* t, ^
- time.week += 1;0 Q s. R$ f0 L2 c* l! e B; U
- time.second -= 604800;
3 I* B4 i1 H/ m% t- t - }6 B7 T0 b1 w8 W0 u: L0 z" e
- . v( ?4 n& z& T
- return time;) O9 ~, [% A; ]6 y! Y
- }
; o2 o1 _/ i8 W
- D* b3 o* B# J9 A0 s- /****************************************************************% ]" V0 g9 G; Q8 x
- * Function: GpsWeekSecondAddSecond
, A- W' {. p% b8 p6 e. T - * Description: Gps week and second add second.- c w; q' G) w: }& P% Z* S4 P
- * Input: time: Gps week and second.
; g* j( F& {& _( l' u4 {. E1 V% M - * second: The number of second to add.9 h8 O$ O, J5 A/ r; t
- * Output:
5 o/ }1 B/ N8 _: }: U - * Return: Gps week and second.
3 K% O/ `$ W h9 V# a; f7 P* N - *****************************************************************/8 d4 Q0 n0 g5 u/ v3 A7 p
- GpsWeekSecond GpsWeekSecondAddSecond(GpsWeekSecond time, int second)) B( s% O5 b* k0 K) q: B
- {+ A, ~0 c0 n5 W) m6 h$ [* J1 ?
- time.week += second / 604800;
4 H( U1 T3 i! i: ` - time.second += second % 604800;
7 T0 \& w$ v3 A* V. v$ e# c8 N - $ c# l+ u' e- Q4 v R
- if(time.second > 604799)4 }7 c* w* s- g$ A5 T. W6 j
- {
( e! r( |! E2 \. y% W; D - time.week += 1;
; v& n: @8 v& a- a A- V7 n - time.second -= 604800;- [* B* M$ n; c+ ^/ n! k
- }4 Y$ E: e/ z7 H" d0 |/ @- W
-
* S; z) q. G" l- @. R, U, j/ R - return time;" r( @2 O) j7 g1 y3 s
- }6 p b0 m' O6 V) g# M
p; J. U/ A) W9 J- e- /****************************************************************+ u0 u/ h& |8 {+ e) }4 |& z
- * Function: GpsWeekSecondToGregorianCalendarDate
' N9 A# N; C, q7 r; T% U - * Description: Gps week and second to gregorian calendar date.
: p. y7 i1 R$ N9 o/ n6 G - * Input: time: Gps week and second.
- l: F7 k" q: F7 H - * Output:
+ O# I s2 D" B; n$ p. \. E# Q: O5 f - * Return: Gregorian calendar date.8 A0 M! b1 N9 t5 A G
- *****************************************************************/3 j! x( m$ G1 b9 j. n# m: J
- DateTime GpsWeekSecondToGregorianCalendarDate(GpsWeekSecond time)- k& w2 D6 i" i j' M/ w
- {+ t. g* r+ ^- A0 J: c- J8 H! r# U8 g
- double jd = GpsWeekSecondToJulianDate(time);: i/ ]7 G; W& j( _) m3 Y/ X
- 0 W8 o" ~* k9 s) S+ Y t% F- V
- return JulianDateToGregorianCalendarDate(jd);: }) ^+ j {3 B7 t
- }2 n* t/ d: p' l* Z, H6 [
$ v- J9 ~2 W1 k9 m8 D- /****************************************************************
# R: d8 V9 g- l8 a& q( p+ N - * Function: GpsWeekSecondToJulianDate& i+ L d) {' d2 [$ a6 R+ N4 B% h
- * Description: Gps week and second to julian date.
' Y* G8 m! R, P$ a! \ - * Input: time: Gps week and second.
G) B' x' y0 f6 G* }$ ^ - * Output:( J: V' R( }+ ~
- * Return: Julian date." }( Q3 d4 o" p% x# G3 f
- *****************************************************************/
- R" W: k+ A; K$ \4 K - double GpsWeekSecondToJulianDate(GpsWeekSecond time)9 ^6 C( I1 J& P5 f0 _; _% v
- {. f5 j$ L# `, ]: G* Q, p i; q
- double jd = 2444244.5 + time.week * 7.0 + time.second / 86400.0;( i1 |7 l" }' ]: L7 Q1 L5 `; x
- 4 P- _3 ?: F1 r2 e8 R1 _3 Q$ d% {
- return jd;
! a8 G+ z; u. C& E0 w# z; ~+ u - }
' R ? Q* z; t- S* v" O - / F7 l7 ]1 k0 {
- /****************************************************************9 N; z! b* _ q7 q; Y1 e
- * Function: GpsWeekSecondToModifiedJulianDate
! q5 j( j' M0 V, { - * Description: Gps week and second to modified julian date.
4 E. j( ]+ g% C I4 `/ N - * Input: time: Gps week and second.
9 _. y! D+ E+ `2 S - * Output:
' p, S8 \- _ z4 q( G2 ~6 |7 T4 N& n, Y - * Return: Modified julian date.- w5 l: N( P" |2 C
- *****************************************************************/+ K" \0 o% K7 M* }& e! m
- double GpsWeekSecondToModifiedJulianDate(GpsWeekSecond time)
: ^' `( t% |; W: o' Q( @ - {: S+ q6 ^- t' W. D
- return GpsWeekSecondToJulianDate(time) - 2400000.5;% _# p# h2 d2 R6 {6 x( R0 l ?5 R
- }# Y, ?- K( D7 x! B4 V, o
- 9 L% @# v: q2 r" H
- /****************************************************************
) `5 A0 }2 D) Y7 d& a) Y' D' T - * Function: JulianDateAddYear
8 W5 u4 N4 `; _1 _. E4 G9 c - * Description: Julian date add year.
- V& B2 z6 D% l9 @& p0 t - * Input: jd: Julian date.
& W. {8 N$ N* H: | - * year: The number of year to add.& E3 [% Z6 B( y7 f& a1 ?' ?
- * Output:( Y, A) k) D* R5 }6 G5 d, F5 b; k) ]( B
- * Return: Julian date.
' ]7 Y% J$ {, o* a# \ - *****************************************************************/
$ Y! B, ]) m4 \! A! O. U - double JulianDateAddYear(double jd, int year)/ }4 w) o( u/ J* i, M0 p
- {' h2 \% ^; I6 e; q. s8 L0 ~! m. x
- DateTime date = JulianDateToGregorianCalendarDate(jd);
( L+ f: B) f) N$ R+ t, O - 9 e0 i2 j3 v" l* \# |
- date = GregorianCalendarDateAddYear(date, year);2 ^( i3 r/ [. B9 f# Z6 ?4 [
1 r) a- R8 t7 s- return GregorianCalendarDateToJulianDate(date);: z1 }- R5 F2 C7 C7 c
- }' }5 m0 e8 ]- m/ C
- 1 f4 B/ a( J8 r9 Q
- /****************************************************************
1 F# b6 F( o6 k - * Function: JulianDateAddMonth- X" m% G3 U1 T( J4 O" k
- * Description: Julian date add month.6 {7 o4 ]6 Y0 T4 x- O, n; i
- * Input: jd: Julian date.
2 z! [; Q2 p% i- C4 V6 R/ z - * month: The number of month to add.$ ]# Q; Z z* ^
- * Output:
) C. Z3 [. O1 K/ Y( M - * Return: Julian date.. l X4 r$ l2 l$ d6 u1 L8 S
- *****************************************************************/
0 N2 _: _: L& Y - double JulianDateAddMonth(double jd, int month)
6 B4 t6 a$ t, P; H2 N# u. q - {
: ^# c4 q6 F" y5 |. s - DateTime date = JulianDateToGregorianCalendarDate(jd);
P8 F L/ U& q0 F$ F2 o8 ^5 D# j
0 Y4 D" o: R# P F- date = GregorianCalendarDateAddMonth(date, month);
' \$ L8 J( j9 ^: s; K5 P - , a1 H( H `4 Q0 `% s( Y
- return GregorianCalendarDateToJulianDate(date);1 I1 r0 E4 L( e! \ ~; u! y4 F% r
- }
; ?8 B9 W$ j( I: ^
8 O' O( [" Z; [. _- /****************************************************************
4 F- X% l" Y' u) I# Y9 z - * Function: JulianDateAddWeek1 z8 C& P+ G/ x1 p. Y3 S! i6 ^
- * Description: Julian date add week.
U5 u% p2 L' Q0 [6 Z7 f( K* u - * Input: jd: Julian date.
0 m; o$ E, @( m I$ J. X7 Q3 { - * week: The number of week to add., t% L, M: P2 B. g N
- * Output:6 v+ {* E/ d/ X& k& f! y
- * Return: Julian date.
5 b: W& B0 a7 ]' T- p4 q" w8 P9 { - *****************************************************************/5 |- {0 [7 U6 w
- double JulianDateAddWeek(double jd, int week)
! e5 R, }7 s6 H - {
k, f8 ]; B# `/ @0 _2 i8 {+ {- J0 q - jd += week * 7.0;$ s5 b' M3 O n" t2 j2 S
- , Z% |8 ~7 p6 j8 Q( H( l
- return jd;
* O: A5 a: Y4 F. B - }$ S9 v( [* e9 ]0 z: f, U& R
- `6 K* f% B& v& D6 Y) s, ^
- /****************************************************************: B" E' i% Z. L o/ U
- * Function: JulianDateAddDay j( J1 X$ }( L( L4 C
- * Description: Julian date add day.4 ~& \0 x" ]7 S& v) p4 T5 _
- * Input: jd: Julian date.* m4 Z: O1 B& a, ~: f
- * day: The number of day to add.
& Q$ Q3 K4 G( i- u* [ - * Output:
2 C1 m# X3 w! ?' p3 X+ g - * Return: Julian date.
# ~9 E& w" f$ }2 t% p - *****************************************************************/; J! g0 I9 M: u& a
- double JulianDateAddDay(double jd, int day)
+ f8 b& Q% }+ S' l - {
* @) P% J) n' A+ L% s7 N) f - jd += day;
& X ^1 i: A& R* @6 z1 c
/ h" U F7 ~. u3 K0 j' q) G+ I- return jd;; ^7 x9 P4 c; K/ H; R9 e
- }
4 C. x( h. D9 b8 q. T
( Q2 Z" }$ B7 e( A0 Z- /****************************************************************; d( R1 }- o% u& R7 F
- * Function: JulianDateAddHour( T$ b% X0 Q, {( U
- * Description: Julian date add hour.
2 y( L0 ~% x6 a) h' e3 a$ E - * Input: jd: Julian date.
4 [& T. \6 H$ a2 X' j' I - * hour: The number of hour to add.
, P3 o) \# w7 U9 ` - * Output:) ?1 O* m7 B4 @
- * Return: Julian date.: m- f4 I* T$ Y7 a, X. B: ]
- *****************************************************************/
' j: l/ U8 W s0 a; i0 T9 F - double JulianDateAddHour(double jd, int hour)
' J2 d% i2 d* ?6 Y" H - {; d C8 f' Y* k
- jd += hour / 24.0;
, h$ }' ~7 l- Y& h6 _6 H3 J4 a - 4 R p7 h m! o: g& |: p
- return jd;8 z6 q: ^! q9 { u$ v- z
- }
) t$ B$ N/ b u - 4 r9 y0 } t1 i8 Z$ @6 \( f
- /****************************************************************0 c) u0 ~# x% M; v
- * Function: JulianDateAddMinute( l* P* x* N s6 L9 C
- * Description: Julian date add minute.+ B/ a. n! h3 u; g" k
- * Input: jd: Julian date.
4 P p/ e3 C; @* \ - * minute: The number of minute to add.+ n0 z+ J- ^& u8 e6 C# S$ ]+ n) ?
- * Output:
3 X4 l% v0 i7 {8 W$ Y% N - * Return: Julian date.
" h0 H2 u) v( ?2 o' W - *****************************************************************/ e6 g4 F% M2 y) B+ S
- double JulianDateAddMinute(double jd, int minute)2 m; M4 C+ w: B3 m7 K, s/ ^
- { d2 k! u/ f3 j( d
- jd += minute / 1440.0;
) E: m; \8 m1 z3 q$ w0 s - 3 |! E% s; W, a4 T2 M
- return jd;! B3 s. S0 A% o* x1 _: x
- }
- g5 m) y ~8 b" ~5 y' A) A" _6 S
+ { f& M6 `& C$ \' ~1 z1 {- /****************************************************************
; ^3 [* V0 A, G9 r" z6 Z/ I - * Function: JulianDateAddSecond
; Z: ?7 C* F- j - * Description: Julian date add second.( G( y) b3 k; e0 _. o
- * Input: jd: Julian date.
3 Z# d! X; r4 S( O - * second: The number of second to add.
0 m, W! q- D$ x- M - * Output:! S; \1 O9 a1 g
- * Return: Julian date.4 p, L+ ^% E' `5 U6 `$ D$ d$ j4 n
- *****************************************************************/8 ]$ A/ ^1 {. j* O: U5 w
- double JulianDateAddSecond(double jd, int second)
; Y7 T2 d3 u6 b - {
* i8 t2 j8 j2 q$ X9 N7 q5 }9 l - jd += second / 86400.0;
2 L* k# [' J. i5 i1 K/ S
" z6 P6 x' v3 T! g: B0 L; t) ]# g- return jd;
( G! I# c ^8 u% ` - }' |5 v; j+ |6 W
- 3 [& u, F3 w+ f2 V
- /****************************************************************
' M6 s: J E; V& X3 }1 O& _- v - * Function: JulianDateToGregorianCalendarDate$ y9 a' z J0 T
- * Description: Julian date to gregorian calendar date.
; p; J2 g/ Y/ R2 K. u" B1 t - * Input: jd: Julian date.2 I, ~0 [. |% }) F+ Z$ X E
- * Output:$ t, X) f. D4 m. Z. [7 E% q3 R
- * Return: Gregorian calendar date./ m) a0 b* D/ ~$ ]9 ?6 T, ?, v2 A
- *****************************************************************/
5 @* t: I9 h! {5 L& y - DateTime JulianDateToGregorianCalendarDate(double jd)
3 G! }) Z) ~& t" k - {
) y2 X7 P3 W; Y - int y = 4716;& \& d! x1 M& D$ K. ^" C
- int j = 1401;6 M z$ n0 M4 |; G! p5 D
- int m = 2;# E( }+ B) G# R z) M
- int n = 12;; U! s% d1 V3 T. U$ r. {# f
- int r = 4;. @. L4 Y, f! A0 Y/ P# t: v, C
- int p = 1461;, W2 B3 U* Y0 m6 | c
- int v = 3;
4 h+ O# W+ D( R1 w. |5 Z - int u = 5;
; b% Z& U. Y& B - int s = 153;
, o: X- `+ Q5 |4 L2 Z& W$ M [ - int w = 2;
* a2 H) }* |. k# N1 ]) W - int b = 274277;* _- @' ^5 I( p' h i
- int c = -38;/ `2 m- M" [! r) q/ P, ~. y, ^ o6 x
4 Y! B3 \$ J7 B6 b8 e( L$ N1 i- int jdn = (int)(jd + 0.5);0 v3 u$ \# M6 p! v* X% C0 S
- int f = jdn + j + (((4 * jdn + b) / 146097) * 3) / 4 + c;6 g; R0 m' c- Q% l2 y- _
- int e = r * f + v;
. k( Y5 R: ~/ g( f - int g = (e % p) / r;
6 u# J9 N1 T; { - int h = u * g + w;5 w6 ?8 i" L0 U: X7 ~
- 2 c( R& z( {) w$ k R& S4 o
- DateTime time = {0};
5 \ h, ?9 v2 C5 _& ]1 M& M' [ - / \: m$ ~5 D9 y- v
- time.day = (h % s) / u + 1;* y$ c7 e- c" q% k+ j
- time.month = (h / s + m) % n + 1;
7 r6 H- W# y/ B. ]( X6 h: _8 N- z; k - time.year = e / p - y + (n + m - time.month) / n;
! t& P* I; i+ M9 N. j - time.hour = (int)((jd + 0.5 - jdn) * 86400.5) / 3600;1 N# g1 {/ S/ y6 G
- time.minute = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600) / 60;
; p: x: V# I+ W T# a% |- T - time.second = (int)((jd + 0.5 - jdn) * 86400.5 - time.hour * 3600 - time.minute * 60);
o: B0 J9 \& z5 J: K* l
; A; C: F Z. L5 p( W& a, [- return time;* ^; T; q* F5 C, Q8 h( L
- }
, ~4 k3 `5 S1 `$ G0 ^ - - j( B* _) v+ O! V
- /****************************************************************
$ P6 j) y7 o. a& `! i# h5 G% h - * Function: JulianDateToGpsWeekSecond. f. V/ M; a/ z- V; M: Z
- * Description: Julian date to gps week and second.! U% q* o) t5 N5 J1 O& l7 i
- * Input: jd: Julian date.
/ t R8 Z1 H3 k5 R - * Output:
% L5 h. l: E# W# H - * Return: Gps week and second.
+ }$ N) `; [6 m' N! U - *****************************************************************/
0 f5 m3 \1 q9 s7 m' G+ W$ O$ K - GpsWeekSecond JulianDateToGpsWeekSecond(double jd)+ r) t1 d7 P+ s
- {
; v- F- t3 o/ i( B% x0 M/ D( k$ z - GpsWeekSecond time = {0};
# U/ x2 V1 }- X" r - DateTime date = JulianDateToGregorianCalendarDate(jd);
# ]9 A8 I! |% j- Q2 c5 s
9 Z# `$ m, b- m G; k4 [- time.week = (int)(jd - 2444244.5) / 7;
/ P4 Y7 Z4 L) r% D7 J - time.second = ((int)(jd - 2444244.5) - time.week * 7) * 86400 + date.hour * 3600 + date.minute * 60 + date.second;6 |( U# j8 M9 J8 Z* z' ^6 Q5 F
: m" a1 V% }7 x- return time;( a# E0 n( C+ q) x8 v
- }
" W: d9 y8 j$ I7 H' S) L7 J* w# \1 }4 G
- f- R2 L" A/ N6 A- /****************************************************************6 @# |2 I( T* r- C" N$ u! _1 |
- * Function: JulianDateToModifiedJulianDate8 ^+ [* {" \0 C- X
- * Description: Julian date to modified julian date.9 z- s+ y2 O2 E% M
- * Input: jd: Julian date.
$ a+ F; ^3 P" T8 [5 B0 [5 E, v+ d9 G - * Output:
3 J4 u( G# S* n% x - * Return: Modified julian date.3 H' C/ G5 `/ l% c& i0 e
- *****************************************************************/
& H1 i" i E7 [ - double JulianDateToModifiedJulianDate(double jd)6 V) ~5 N ~- [% q( A
- {
8 C; E A) w- q( f) W0 T - double mjd = jd - 2400000.5;; v! G. T/ I; t W6 \2 S! p9 \
/ d" m% i8 S% m$ A- return mjd;* A: z: S1 |* B$ E
- }
: q. b& P7 V" C, F0 B! E
8 o0 |8 q, a( F7 |9 V- /****************************************************************
3 y4 Y; U# P! H - * Function: ModifiedJulianDateAddYear$ u5 A8 O; ^# G* p6 |
- * Description: Modified julian date add year.9 [- ]2 r* I4 K- _8 P5 E1 Y
- * Input: mjd: Modified julian date.
% A4 x" I$ Y2 M, S/ t - * year: The number of year to add., c4 n' H5 G0 w) l' r, p6 t
- * Output:
( q; q r {9 }! W - * Return: Modified julian date.1 g) R" a9 x& g# n
- *****************************************************************/
( ^# K9 h# k) `+ ]. ~5 u7 V/ [6 _ - double ModifiedJulianDateAddYear(double mjd, int year)
' h% V R, i7 H7 d2 ], o# x - {( @9 _5 [- q1 I# P9 C
- DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd); P; h1 L" P# T$ \
: S2 q2 u: w& c1 D8 A. }- date = GregorianCalendarDateAddYear(date, year);
0 C- u7 l; G1 r& z7 y1 |: @) M) `
~ H4 G, m2 v0 k3 L% j+ s2 n- return GregorianCalendarDateToModifiedJulianDate(date);; b' b2 S$ O* j9 p0 w
- }% t& k5 @; F( ~+ q- D
- 3 l! L$ |1 j4 J! F- j9 s9 G
- /****************************************************************
) u3 T" B. x' k* _+ Q" I- D# i - * Function: ModifiedJulianDateAddMonth
6 u5 l% S @, }7 V# c% z - * Description: Modified julian date add month.
0 N* B7 L5 j" `7 n - * Input: mjd: Modified julian date.
5 u, Y# a# u3 Z$ n- r' v - * month: The number of month to add.% O2 F" O* \* t6 O( H1 i
- * Output:1 t T4 I# |$ k8 i/ i% c, N
- * Return: Modified julian date. [2 c4 K5 {$ Q9 J
- *****************************************************************/" ]7 `( A/ F# L0 X( S/ q3 u
- double ModifiedJulianDateAddMonth(double mjd, int month)
' F. @7 T q/ u- w. H) M. t - {) ~8 c* `1 ]4 r6 v) x
- DateTime date = ModifiedJulianDateToGregorianCalendarDate(mjd);
6 Q$ a; R7 V _1 [5 a/ B( k
7 y H$ H% O1 Z3 r- date = GregorianCalendarDateAddMonth(date, month);
4 D( A j; E9 E0 u
) u( o# g$ C. q" F9 ^3 U- return GregorianCalendarDateToModifiedJulianDate(date);7 j" g. \3 g" Z: X, Y6 C
- }
( V' c1 Z; m0 |8 c s' t3 o" {1 w
6 G: E' P* M3 Y) K5 e- /****************************************************************, T; z5 `/ j( }& r6 _
- * Function: ModifiedJulianDateAddWeek9 F" k' \; X3 v
- * Description: Modified julian date add week.7 d% x1 `' z# O: [4 C' J% V" }0 v
- * Input: mjd: Modified julian date.; |" y; E4 H+ Z+ `( h7 D
- * week: The number of week to add.
& M# w+ t9 L% Q( A- L8 b - * Output:
% b) W0 Q5 Z0 U. _$ Y7 H - * Return: Modified julian date., n) h- C3 ^. w) U* t" C
- *****************************************************************/
% v' w/ x6 \6 e/ h6 A2 Y - double ModifiedJulianDateAddWeek(double mjd, int week), P1 n6 J5 l" e9 q
- {
% @$ C- C2 `/ m- F& _3 T5 s" J - mjd += week * 7.0;
/ C) L, j8 A4 }/ O8 d
% D3 x9 m1 p, d+ t* v, t- return mjd;0 y) X$ ~9 i8 r% F: @) h
- }
) K( a& m5 c* a: e. E - 7 w0 r( D; b2 X/ w. N$ x5 ]( w
- /****************************************************************
: H- o3 }+ T8 ^( ^5 k3 P9 w - * Function: ModifiedJulianDateAddDay8 r( M% Y8 U2 j; H" @. d
- * Description: Modified julian date add day.
0 R% W4 g. ^# Q: O& | - * Input: mjd: Modified julian date.
0 P+ f1 |# g2 S3 n5 a8 ~ - * day: The number of day to add.
) X0 P( v- e' E - * Output:
2 k* ~# `% P8 D; D4 q - * Return: Modified julian date.
. n1 F/ h+ X T [4 F0 z - *****************************************************************/ ?3 i7 |! l' o/ z
- double ModifiedJulianDateAddDay(double mjd, int day)
8 i# a0 L1 G0 b - {5 v8 E' I1 G9 j/ V. B4 U1 P' U
- mjd += day;0 n5 a: w9 n% |% \
+ c- g+ ?& Y% _+ e0 v, y- return mjd;
( @, d5 O! v; J3 I9 M - }' d6 Q- a1 u. A5 ?$ s/ e
- / M: G9 `' X- @
- /****************************************************************
! @& P% n+ I3 | - * Function: ModifiedJulianDateAddHour
4 F! G- _( J6 w& v" A% n - * Description: Modified julian date add hour.! k$ L/ ?+ {7 L. J% J
- * Input: mjd: Modified julian date.6 c8 R' ]$ k7 l9 z# D- Y5 K
- * hour: The number of hour to add.
2 c% Z4 d1 ]2 k. A( t) t1 H - * Output:
' V6 }: {# m( J2 Y' ~9 x - * Return: Modified julian date.- f0 \3 ~* P& B& i, F: O R
- *****************************************************************/# v0 T% Y% n& r+ Z- _5 Y5 N
- double ModifiedJulianDateAddHour(double mjd, int hour)2 {. n, C `0 D3 T$ d9 n
- {
. z, v7 x# R) j7 |& Z - mjd += hour / 24.0;5 S+ I7 z; t* I# @9 a
, m, F# Z; n! B1 `+ h- return mjd;6 s2 d! y( i7 W0 }3 |
- }3 M- K) v" G! N; _6 _! Z
- . u/ ~ ~# o3 w' v
- /****************************************************************
! N/ W/ A* W' e7 v - * Function: ModifiedJulianDateAddMinute
- C: O% Z& C+ `6 K- V) _% \ - * Description: Modified julian date add minute.: G1 b X2 X: W2 a& h
- * Input: mjd: Modified julian date.
. x4 s# j: o4 ^! _4 q - * minute: The number of minute to add.
; S) X- S y" [! s9 _ - * Output:
) Y- C% V( m. G' s" H - * Return: Modified julian date.7 N2 P( Z! l! t3 ^
- *****************************************************************/4 R+ C3 q% Q/ s# x7 E, J! d
- double ModifiedJulianDateAddMinute(double mjd, int minute)" w) ]! s; N7 u, c! w. H
- {
& Y% a4 }" F6 J7 Z9 I - mjd += minute / 1440.0;; r1 `5 i% I& z ?/ b, a* Z
$ W, x" _' i( X8 a2 \- return mjd;
O& n y! [/ T2 G# E: y8 N3 U - }
9 V3 P( t0 K5 q' Q0 }
8 R6 r2 T5 c" J7 _- T0 ?- /****************************************************************
9 ~5 Z9 S6 @, ^7 H7 k6 o - * Function: ModifiedJulianDateAddSecond
. [% G" p+ {! |0 T, c" l - * Description: Modified julian date add second., e4 {' a7 r- }) \
- * Input: mjd: Modified julian date.
9 m7 }' x& P( U$ Z - * second: The number of second to add.
( M e$ ^. b3 A7 O j8 I, j - * Output:
& |: D* U0 w* @6 f! d& z - * Return: Modified julian date.9 \+ ~ T: I( k
- *****************************************************************/
2 G8 B9 L/ A- \ - double ModifiedJulianDateAddSecond(double mjd, int second)
! R" S) q3 C( O4 N - {
* m& o/ i& G- {+ g2 W q - mjd += second / 86400.0;2 u) Z" Z; p* m Q/ {- f9 J8 q) j
; S- C. O0 k V' ]+ g- return mjd;
- Z f) V- h; z; v6 n' N - }2 Z+ T' z$ r1 H* N
- , U& s; l! g6 M; g8 F' X
- /****************************************************************7 g9 e. U" u7 ^# M+ R6 f* x
- * Function: ModifiedJulianDateToGregorianCalendarDate
' D5 Z6 y) Y) B( } T - * Description: Modified julian date to gregorian calendar date.
; W+ m1 @ O" _4 m - * Input: mjd: Modified julian date.
% G+ v3 p' G& \3 V4 B - * Output:
: V- b3 r7 F. p* H* x2 o - * Return: Gregorian calendar date.4 n. F" V5 k. w5 G
- *****************************************************************/
- F' d- V7 d8 J% F6 v4 [) p - DateTime ModifiedJulianDateToGregorianCalendarDate(double mjd)
. p/ P' j2 w; f' n; A6 u+ J - {
+ |& c( r; z6 J# o8 E% U; X6 ~' a - return JulianDateToGregorianCalendarDate(mjd + 2400000.5);" ~7 m! M" k9 N6 P9 y
- }9 g/ i) v- ~. T- l
$ ~ z! ?, V9 R! a$ e- /****************************************************************
) ~ ^2 w0 _5 [# B8 B. _1 P, ` - * Function: ModifiedJulianDateToGpsWeekSecond' [' u, m6 l" M5 v, `" C3 d
- * Description: Modified julian date to gps week and second.+ X, C5 d5 h' R" b I5 \0 @% h3 W
- * Input: mjd: Modified julian date.9 R. s8 T3 U1 |! u0 h
- * Output:) n' \4 {% h! U
- * Return: Gps week and second.4 {0 q% h* o0 e" Q; \
- *****************************************************************/
* a& T' u4 T y6 | - GpsWeekSecond ModifiedJulianDateToGpsWeekSecond(double mjd) J: W2 z' [4 r y8 A( ?3 ?
- {" D4 k7 a0 @; ~) F
- return JulianDateToGpsWeekSecond(mjd + 2400000.5);) B/ ]! c3 `: t1 `4 ~
- }
: n/ c- P8 l7 |! P' ~% C - ( ~! Y+ k" R- `/ b2 X
- /****************************************************************/ S4 o: ^1 N: z1 x) z. o+ m
- * Function: ModifiedJulianDateToJulianDate
' L- C0 b# D/ ^+ l, ^. a - * Description: Modified julian date to julian date.3 \" a) X0 u4 O$ w, c
- * Input: mjd: Modified julian date.
7 R/ B! H1 a4 }2 t+ z% T+ x - * Output:. \& c/ O a s1 Y- i
- * Return: Julian date.
1 ]/ h5 @8 Z$ M3 P4 l4 M - *****************************************************************/
% I6 w7 ] c$ y# W- ~4 l9 E - double ModifiedJulianDateToJulianDate(double mjd)" N* @4 b4 h4 I. R4 y9 E( h
- {0 R; Q1 O5 ^) q, K
- double jd = mjd + 2400000.5;1 Z" X2 o3 g# G9 l# w6 G
, H- {. h' J1 P: e9 V2 i8 c- return jd;: \6 D# ^3 I' U# G- D9 P
- }
4 E/ S1 M( }+ m( ?( ?8 H, P% ^, _
复制代码 0 Q1 x. H0 A7 W/ [' _
main.c文件+ j4 |0 ]; k! N1 r! ~# Z
- /****************************************************************
- a2 D" t/ h% X! N - * Copyright (C) 2017, XinLi, all right reserved.
8 k: v! v3 E1 k - * File name: main.c, z# w1 i8 ?9 F! ~+ M/ S
- * Date: 2017.10.17
. r9 m& p# p. k% s& f - * Description: GPS, UTC and local time displays.; Z5 U9 W4 T1 ~
- *****************************************************************/" d: |7 O0 N% |$ f
- ) Y% u) h3 W) O
- /****************************************************************4 }2 R" I3 P& \- H
- * Header include4 }/ o o& l% U4 `0 c
- *****************************************************************/8 P' b% z" V1 K! }8 I, M( q! |1 ^2 @
- #include "DateTime.h"
0 [" ?4 L9 I) n& W6 q - #include <stdint.h>7 Q+ f6 I# Y, y% }
- #include <stdio.h>
( t* x# q! D# P/ h - #include <time.h>
0 S2 z f' v, u# } - #include <windows.h>" O& d. P3 P7 K' \2 M; @/ R
1 p8 j# u2 [+ i) b- /****************************************************************
7 ]# L& Y8 N t( r' l! ^/ x - * Global variables, z/ U5 g- |2 V, J/ o
- *****************************************************************/5 E/ _% Q% @, h: g7 n
- . e0 u+ b$ J5 o3 `( B9 N$ G- V: n
* p" U/ b$ v# K( O6 k: s- /****************************************************************& R! `, h6 w" r: k- r8 d
- * Function declaration
, A% w0 ^7 b$ K- @( ~ - *****************************************************************/
9 v) y) f7 D' \3 I: N$ {) R, ~ - static void gotoxy(int x, int y);
! a8 A1 \& v4 Z' { - 3 h; }/ D6 a# [$ ~9 [2 U! Z7 c, Q9 `
- /****************************************************************- {2 Q. `" f; E5 E# ]5 O
- * Function definition/ N* T- a, k! C8 l
- *****************************************************************/" _9 m4 J; o$ W: D- D, Y1 w
; _; P8 S6 v H) g1 ?- /****************************************************************
) C0 c$ r# Q/ j7 k& M5 [ - * Function: main- }( t- m8 w+ [: v+ a& F" H
- * Description: Program entry.
0 P2 `6 ~+ D, a: s, ] w! ^ - * Input:
0 Z+ w5 H" U6 u% a - * Output:
Z* z' f$ i( G5 c - * Return:
( I' t+ R1 _8 x8 H - *****************************************************************/
0 w$ |, c+ o' p# b - int main(void)
2 y* i% Y6 P- y4 b" X - {. ~& Z4 J, g3 T/ f5 ?5 s8 @; }
- for(;;)
+ E1 k+ J4 c4 I) R4 l3 p - {/ J0 y' `. |: u6 X; w
- time_t times = 0;& }4 P e$ ?* N5 `% i( S
- double mjd = 0.0;
7 k( x+ G0 m' [+ _+ [ - DateTime utctime = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};
J w$ ]3 S( g/ W' i - DateTime localtime = {.year = 1970, .month = 1, .day = 1, .hour = 8, .minute = 0, .second = 0};- K3 Y8 M0 I o* X4 [. `
- DateTime gpstime = {.year = 1970, .month = 1, .day = 1, .hour = 0, .minute = 0, .second = 0};
3 I1 ]7 g* k) C2 f8 n/ N- Q( @ - GpsWeekSecond gpstimews = {0};" y. z& O3 q+ Y! x
# `8 J; k! n! G$ _& F- time(×);
8 E4 t' V- z# m
9 u) P5 P, t0 s1 t3 y- if(times > INT32_MAX)2 k6 j5 \: ?% R& t7 Q; z: B) S
- {6 d4 c u; x: }9 k; p) i
- utctime = GregorianCalendarDateAddSecond(utctime, INT32_MAX);6 V6 q) i% E3 x5 b( P
- utctime = GregorianCalendarDateAddSecond(utctime, (int)(times - INT32_MAX));
; A/ ~" t: @! v0 A$ M1 j% j; u - }
2 v" Y4 H" i( c( X! ] z - else9 H9 A, u# B: n" Y' }
- {
8 S J; a4 E6 ?. h7 {' x7 \ - utctime = GregorianCalendarDateAddSecond(utctime, (int)times);
( `. z. Q' D) {/ t% l - }
8 F; r6 `( l7 _5 ?: c- h - ; h" `( Z b1 r: M8 f7 V( v8 ~
- mjd = GregorianCalendarDateToModifiedJulianDate(utctime);( m- ?# W0 D5 @) W( f8 z
- localtime = GregorianCalendarDateAddHour(utctime, 8);
( Q8 f# u% P; z. D7 N5 ]* [/ M' I% Z - gpstime = GregorianCalendarDateAddSecond(utctime, 18);2 i& F- p# k2 j% f
- gpstimews = GregorianCalendarDateToGpsWeekSecond(gpstime);
7 S5 z; @* a' k1 U8 Z W5 @ - $ C$ V, r4 T3 H4 N! H
- gotoxy(0, 0);; J$ _: d+ D* q
; Z. `0 G& Q* y# t" \- printf("Local | %d-%.2d-%.2d %.2d:%.2d:%.2d | timezone UTC+8\n", p0 d1 @/ m' ?: z- k
- localtime.year, localtime.month, localtime.day,, T+ R! E9 k; d9 n( U8 y* l! m
- localtime.hour, localtime.minute, localtime.second);4 j! e! N$ `# ]/ w% S
- " X# J. V7 o4 l- {# x* Y' _5 E$ V
- printf("UTC | %d-%.2d-%.2d %.2d:%.2d:%.2d | MJD %.5f\n",
" V+ {2 U# G' b5 N( M6 ~ - utctime.year, utctime.month, utctime.day,, k1 H" h. |& P$ G6 v
- utctime.hour, utctime.minute, utctime.second,
) d) m+ h0 Z2 F - mjd);+ c( g2 |4 `. {2 a; @
- 4 X: T* |& J: \$ g) t1 S
- printf("GPS | %d-%.2d-%.2d %.2d:%.2d:%.2d | week %d %d s\n",
( ?) ?( J' x9 B3 H- T3 E/ m2 T - gpstime.year, gpstime.month, gpstime.day,
: U0 [& p( q. C6 I' n) P# D$ L, [1 H; g - gpstime.hour, gpstime.minute, gpstime.second,
3 K1 z. ]1 H* S0 V - gpstimews.week, gpstimews.second);
/ K5 ]7 z! L2 o" q* g- G( i - , S6 D. b1 N3 F$ ]& a
- Sleep(100);
3 r: y( [. [3 g* n) W. ` - }% i/ _" G3 s+ O% e% J/ W; B9 e
- }6 q5 p- ^) w! `# l6 r
- 3 Q, V; a s' U0 x6 O# K) l
- /****************************************************************- i" x/ I- n" @0 b
- * Function: gotoxy
5 p' O! W& |: L- l' O3 { - * Description: Move the cursor to the specified position on the text screen.
. V" r) h' s8 P- f6 G8 R" f - * Input: x: X axis coordinates.
H* A6 n s0 Q6 x6 Z# ^ - * y: Y axis coordinates.3 Y, g. b& ]) F2 X2 t3 I( D
- * Output:
+ I( v+ L& }9 n6 s/ M - * Return:) Z" f% k$ V& P( \; H9 f0 M0 Z
- *****************************************************************/' b; E9 G* h1 m) x( |
- static void gotoxy(int x, int y)
5 U0 X4 P/ B3 z8 G0 U; ]* i - {
7 Y4 {! E* z- }$ p - COORD pos = {x, y};' i! F# O( K: t" s% _
- HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);, ?1 E Z0 U) w) A' O9 `& X5 u
- SetConsoleCursorPosition(hOut, pos);$ i* V6 A; V6 \$ F
- } c3 J$ o5 |7 H' v$ R5 Q$ O
复制代码 9 B, A( o3 d, e F
3,运行效果
3 N+ z, i: @* [/ T0 u6 u
- T% r* p0 h! C0 j! Y # `! w& ^, h! g( o
" a& Y, v+ `% I# g# @9 s1 E
|
朱利安日期,GPS周和周内秒,一般的库都没有吧,除非是专门做导航的库才会有这些。写这个是为了方便的在嵌入式端使用。
/ ^9 T' i9 M P# ]0 b, t9 b# F0 ?
直接 #include <time.h>不就OK了?1 C4 c( ?) @5 f+ ~& J6 [
C51才需要自己实现,stm32的环境,何须如此麻烦。
以上。
儒略历和格里历的转换一般支持时区转换的库都有。(那个不叫朱利安日期……)至于 GPS 周和周内秒,如果用现有库的话,也只要可以和 UNIX 时间戳互转就可以了,没那么复杂。
朱利安日期有这样叫的,是 Julian Date 音译过来的。