MRTKLIB 0.7.14
Modernized GNSS Positioning Library
Loading...
Searching...
No Matches
mrtk_time.h
Go to the documentation of this file.
1/*------------------------------------------------------------------------------
2 * mrtk_time.h : time and date type definitions and functions
3 *
4 * Copyright (C) 2026 H.SHIONO (MRTKLIB Project)
5 * Copyright (C) 2023-2025 Cabinet Office, Japan
6 * Copyright (C) 2024-2025 Lighthouse Technology & Consulting Co. Ltd.
7 * Copyright (C) 2023-2025 Japan Aerospace Exploration Agency
8 * Copyright (C) 2023-2025 TOSHIBA ELECTRONIC TECHNOLOGIES CORPORATION
9 * Copyright (C) 2015- Mitsubishi Electric Corp.
10 * Copyright (C) 2014 Geospatial Information Authority of Japan
11 * Copyright (C) 2014 T.SUZUKI
12 * Copyright (C) 2007-2023 T.TAKASU
13 *
14 * SPDX-License-Identifier: BSD-2-Clause
15 *----------------------------------------------------------------------------*/
16/**
17 * @file mrtk_time.h
18 * @brief MRTKLIB Time Module — GNSS time types and conversion functions.
19 *
20 * This header provides the fundamental time type (gtime_t) and all
21 * conversion functions between calendar, GPS, Galileo, BeiDou, and UTC
22 * time representations. It is the first module extracted from the legacy
23 * rtklib.h monolith.
24 *
25 * @note All functions in this module are pure cut-and-paste extractions
26 * from rtkcmn.c with zero algorithmic changes.
27 */
28#ifndef MRTK_TIME_H
29#define MRTK_TIME_H
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35#include <time.h>
36
38
39/*============================================================================
40 * Time Type
41 *===========================================================================*/
42
43/**
44 * @brief GNSS time representation.
45 *
46 * Combines POSIX time_t (integer seconds since 1970-01-01 UTC) with a
47 * sub-second fractional part for high-precision timing.
48 */
49typedef struct {
50 time_t time; /**< time (s) expressed by standard time_t */
51 double sec; /**< fraction of second under 1 s */
52} gtime_t;
53
54/*============================================================================
55 * Calendar / Epoch Conversions
56 *===========================================================================*/
57
58/**
59 * @brief Convert substring in string to gtime_t struct.
60 * @param[in] s String ("... yyyy mm dd hh mm ss ...")
61 * @param[in] i Substring position
62 * @param[in] n Substring width
63 * @param[out] t Resulting gtime_t struct
64 * @return Status (0:ok, <0:error)
65 */
66int str2time(const char* s, int i, int n, gtime_t* t);
67
68/**
69 * @brief Convert gtime_t struct to string.
70 * @param[in] t gtime_t struct
71 * @param[out] str String ("yyyy/mm/dd hh:mm:ss.ssss")
72 * @param[in] n Number of decimals
73 */
74void time2str(gtime_t t, char* str, int n);
75
76/**
77 * @brief Convert calendar day/time to gtime_t struct.
78 * @param[in] ep Day/time {year, month, day, hour, min, sec}
79 * @return gtime_t struct
80 */
81gtime_t epoch2time(const double* ep);
82
83/**
84 * @brief Convert gtime_t struct to calendar day/time.
85 * @param[in] t gtime_t struct
86 * @param[out] ep Day/time {year, month, day, hour, min, sec}
87 */
88void time2epoch(gtime_t t, double* ep);
89
90/**
91 * @brief Get time string (not reentrant).
92 * @param[in] t gtime_t struct
93 * @param[in] n Number of decimals
94 * @return Static time string
95 */
96char* time_str(gtime_t t, int n);
97
98/*============================================================================
99 * GNSS Time System Conversions
100 *===========================================================================*/
101
102/**
103 * @brief Convert GPS week/tow to gtime_t.
104 * @param[in] week GPS week number
105 * @param[in] sec Time of week (s)
106 * @return gtime_t struct
107 */
108gtime_t gpst2time(int week, double sec);
109
110/**
111 * @brief Convert gtime_t to GPS week/tow.
112 * @param[in] t gtime_t struct
113 * @param[out] week GPS week number (NULL: no output)
114 * @return Time of week in GPS time (s)
115 */
116double time2gpst(gtime_t t, int* week);
117
118/**
119 * @brief Convert Galileo system time week/tow to gtime_t.
120 * @param[in] week GST week number
121 * @param[in] sec Time of week (s)
122 * @return gtime_t struct
123 */
124gtime_t gst2time(int week, double sec);
125
126/**
127 * @brief Convert gtime_t to Galileo system time week/tow.
128 * @param[in] t gtime_t struct
129 * @param[out] week GST week number (NULL: no output)
130 * @return Time of week in GST (s)
131 */
132double time2gst(gtime_t t, int* week);
133
134/**
135 * @brief Convert BeiDou time week/tow to gtime_t.
136 * @param[in] week BDT week number
137 * @param[in] sec Time of week (s)
138 * @return gtime_t struct
139 */
140gtime_t bdt2time(int week, double sec);
141
142/**
143 * @brief Convert gtime_t to BeiDou time week/tow.
144 * @param[in] t gtime_t struct
145 * @param[out] week BDT week number (NULL: no output)
146 * @return Time of week in BDT (s)
147 */
148double time2bdt(gtime_t t, int* week);
149
150/*============================================================================
151 * Time Arithmetic
152 *===========================================================================*/
153
154/**
155 * @brief Add seconds to gtime_t.
156 * @param[in] t gtime_t struct
157 * @param[in] sec Seconds to add
158 * @return t + sec
159 */
160gtime_t timeadd(gtime_t t, double sec);
161
162/**
163 * @brief Compute time difference (t1 - t2).
164 * @param[in] t1 gtime_t struct
165 * @param[in] t2 gtime_t struct
166 * @return Difference in seconds (t1 - t2)
167 */
168double timediff(gtime_t t1, gtime_t t2);
169
170/*============================================================================
171 * Leap-Second-Aware Conversions
172 *===========================================================================*/
173
174/**
175 * @brief Convert GPS time to UTC considering leap seconds.
176 * @param[in] t Time in GPS time
177 * @return Time in UTC
178 */
180
181/**
182 * @brief Convert UTC to GPS time considering leap seconds.
183 * @param[in] t Time in UTC
184 * @return Time in GPS time
185 */
187
188/**
189 * @brief Convert GPS time to BeiDou time.
190 * @param[in] t Time in GPS time
191 * @return Time in BDT
192 */
194
195/**
196 * @brief Convert BeiDou time to GPS time.
197 * @param[in] t Time in BDT
198 * @return Time in GPS time
199 */
201
202/**
203 * @brief Read leap seconds table from file.
204 * @param[in] file Leap seconds table file path
205 * @return Status (1:ok, 0:error)
206 */
207int read_leaps(const char* file);
208
209/*============================================================================
210 * System Clock and Utilities
211 *===========================================================================*/
212
213/**
214 * @brief Get current time in UTC.
215 * @return Current time in UTC
216 */
217gtime_t timeget(void);
218
219/**
220 * @brief Set current time offset in UTC.
221 * @param[in] t Current time in UTC
222 */
223void timeset(gtime_t t);
224
225/**
226 * @brief Reset time offset to zero.
227 */
228void timereset(void);
229
230/**
231 * @brief Convert time to day of year.
232 * @param[in] t gtime_t struct
233 * @return Day of year (days)
234 */
235double time2doy(gtime_t t);
236
237/**
238 * @brief Convert UTC to Greenwich Mean Sidereal Time.
239 * @param[in] t Time in UTC
240 * @param[in] ut1_utc UT1-UTC correction (s)
241 * @return GMST in radians
242 */
243double utc2gmst(gtime_t t, double ut1_utc);
244
245/**
246 * @brief Adjust GPS week number using CPU time.
247 * @param[in] week Not-adjusted GPS week number (0-1023)
248 * @return Adjusted GPS week number
249 */
250int adjgpsweek(int week);
251
252/**
253 * @brief Get current tick in milliseconds.
254 * @return Current tick (ms)
255 */
256uint32_t tickget(void);
257
258/**
259 * @brief Sleep for specified milliseconds.
260 * @param[in] ms Milliseconds to sleep (<0: no sleep)
261 */
262void sleepms(int ms);
263
264#ifdef __cplusplus
265}
266#endif
267
268#endif /* MRTK_TIME_H */
MRTKLIB Foundation — Common types, standard includes, and system constants (MAXSAT,...
gtime_t gst2time(int week, double sec)
Convert Galileo system time week/tow to gtime_t.
Definition mrtk_time.c:197
gtime_t bdt2time(int week, double sec)
Convert BeiDou time week/tow to gtime_t.
Definition mrtk_time.c:229
void sleepms(int ms)
Sleep for specified milliseconds.
Definition mrtk_time.c:588
gtime_t epoch2time(const double *ep)
Convert calendar day/time to gtime_t struct.
Definition mrtk_time.c:113
double utc2gmst(gtime_t t, double ut1_utc)
Convert UTC to Greenwich Mean Sidereal Time.
Definition mrtk_time.c:485
gtime_t gpst2time(int week, double sec)
Convert GPS week/tow to gtime_t.
Definition mrtk_time.c:165
void time2epoch(gtime_t t, double *ep)
Convert gtime_t struct to calendar day/time.
Definition mrtk_time.c:136
int read_leaps(const char *file)
Read leap seconds table from file.
Definition mrtk_time.c:397
gtime_t gpst2bdt(gtime_t t)
Convert GPS time to BeiDou time.
Definition mrtk_time.c:458
gtime_t gpst2utc(gtime_t t)
Convert GPS time to UTC considering leap seconds.
Definition mrtk_time.c:422
double timediff(gtime_t t1, gtime_t t2)
Compute time difference (t1 - t2).
Definition mrtk_time.c:279
double time2gpst(gtime_t t, int *week)
Convert gtime_t to GPS week/tow.
Definition mrtk_time.c:181
double time2bdt(gtime_t t, int *week)
Convert gtime_t to BeiDou time week/tow.
Definition mrtk_time.c:245
double time2doy(gtime_t t)
Convert time to day of year.
Definition mrtk_time.c:540
int adjgpsweek(int week)
Adjust GPS week number using CPU time.
Definition mrtk_time.c:553
gtime_t timeadd(gtime_t t, double sec)
Add seconds to gtime_t.
Definition mrtk_time.c:265
gtime_t bdt2gpst(gtime_t t)
Convert BeiDou time to GPS time.
Definition mrtk_time.c:465
char * time_str(gtime_t t, int n)
Get time string (not reentrant).
Definition mrtk_time.c:530
void timereset(void)
Reset time offset to zero.
Definition mrtk_time.c:324
void timeset(gtime_t t)
Set current time offset in UTC.
Definition mrtk_time.c:318
int str2time(const char *s, int i, int n, gtime_t *t)
Convert substring in string to gtime_t struct.
Definition mrtk_time.c:87
double time2gst(gtime_t t, int *week)
Convert gtime_t to Galileo system time week/tow.
Definition mrtk_time.c:213
void time2str(gtime_t t, char *str, int n)
Convert gtime_t struct to string.
Definition mrtk_time.c:507
gtime_t utc2gpst(gtime_t t)
Convert UTC to GPS time considering leap seconds.
Definition mrtk_time.c:440
gtime_t timeget(void)
Get current time in UTC.
Definition mrtk_time.c:289
uint32_t tickget(void)
Get current tick in milliseconds.
Definition mrtk_time.c:566
GNSS time representation.
Definition mrtk_time.h:49
double sec
Definition mrtk_time.h:51
time_t time
Definition mrtk_time.h:50