-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathtime.h
190 lines (157 loc) · 6.25 KB
/
time.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#ifndef _TIME_H_
#define _TIME_H_
//=====================================================================//
/*! @file
@brief 時間関数(ヘッダー)
@author 平松邦仁 ([email protected])
@copyright Copyright (C) 2016 Kunihito Hiramatsu @n
Released under the MIT license @n
https://github.com/hirakuni45/RX/blob/master/LICENSE
*/
//=====================================================================//
#include <stdint.h>
#include <sys/types.h>
// typedef uint32_t time_t;
// SUN:0 MON:1 THU:2 WED:3 THU:4 FRI:5 SAT:6
struct tm {
uint8_t tm_sec; /* seconds after the minute - [0,59] */
uint8_t tm_min; /* minutes after the hour - [0,59] */
uint8_t tm_hour; /* hours since midnight - [0,23] */
uint8_t tm_mday; /* day of the month - [1,31] */
uint8_t tm_mon; /* months since January - [0,11] */
uint16_t tm_year; /* years since 1900 */
uint8_t tm_wday; /* days since Sunday - [0,6] */
uint16_t tm_yday; /* days since January 1 - [0,365] */
char tm_isdst; /* daylight savings time flag */
};
#ifdef __cplusplus
extern "C" {
#endif
//-----------------------------------------------------------------//
/*!
@brief 西暦から、その年がうるう年かを判定
@param[in] year 西暦
@return うるう年なら「0」以外
*/
//-----------------------------------------------------------------//
char check_leap_year(short year);
//-----------------------------------------------------------------//
/*!
@brief 西暦と、月から、その月の最大日数を得る。
@param[in] year 西暦
@param[in] mon 月(0 to 11)
@return 「月」に対応する最大日数
*/
//-----------------------------------------------------------------//
char get_mday(short year, char mon);
//-----------------------------------------------------------------//
/*!
@brief 西暦から、その年の総日数を得る。
@param[in] year 西暦
@return 「年」に対応する総日数
*/
//-----------------------------------------------------------------//
short get_yday(short year);
//-----------------------------------------------------------------//
/*!
@brief 西暦、月から、1970 年からの総日数を得る。
@param[in] year 西暦 1970 〜
@param[in] mon 月 [0..11]
@param[in] day 日 [1..31]
@return 1970 年1月1日からの総日数
*/
//-----------------------------------------------------------------//
long get_total_day(short year, char mon, char day);
//-----------------------------------------------------------------//
/*!
@brief 世界標準時間(グリニッジ)からのオフセットを取得
@return オフセット時間(秒)
*/
//-----------------------------------------------------------------//
time_t get_timezone_offset(void);
//-----------------------------------------------------------------//
/*!
@brief 世界標準時間(グリニッジ)から、tm 構造体のメンバー
を生成する。(スレッドセーフ用)
@param[in] tp
@param[out] res
@return グローバル tm 構造体のポインター
*/
//-----------------------------------------------------------------//
struct tm *gmtime_r(const time_t *, struct tm* res);
//-----------------------------------------------------------------//
/*!
@brief 世界標準時間(グリニッジ)から、tm 構造体のメンバー
を生成する。(互換性の為)
@param[in] tp
@return グローバル tm 構造体のポインター
*/
//-----------------------------------------------------------------//
struct tm *gmtime(const time_t *);
//-----------------------------------------------------------------//
/*!
@brief tm 構造体から、世界標準(グリニッジ)時間を得る@n
※メンバー変数 tm_yday は再計算される。@n
※メンバー変数 tm_wday は再計算される。@n
※ tm_isdgt は無視される。
@param[in] tmp tm 構造体のポインター@n
※NULLの場合は、システムの構造体が使われる
@return GMT:1970年1月1日0時0分0秒(4:THU)からの経過時間(秒)
*/
//-----------------------------------------------------------------//
time_t mktime_gmt(const struct tm *tmp);
//-----------------------------------------------------------------//
/*!
@brief tm 構造体から(ローカル時間)、世界標準(グリニッジ)時間を得る@n
※メンバー変数 tm_yday は再計算される。@n
※メンバー変数 tm_wday は再計算される。@n
※ tm_isdgt は無視される。
@param[in] tmp tm 構造体のポインター@n
※NULLの場合は、システムの構造体が使われる
@return GMT:1970年1月1日0時0分0秒(4:THU)からの経過時間(秒)
*/
//-----------------------------------------------------------------//
time_t mktime(const struct tm *);
//-----------------------------------------------------------------//
/*!
@brief このモジュールで利用している tm 構造体のポインターを得る。
@return tm 構造体のポインター
*/
//-----------------------------------------------------------------//
struct tm *get_tm(void);
//-----------------------------------------------------------------//
/*!
@brief 格納されているデータを現地時間に変換
@param[in] timer 現地時間
@return tm 構造体のポインター
*/
//-----------------------------------------------------------------//
struct tm *localtime(const time_t *timer);
//-----------------------------------------------------------------//
/*!
@brief tm 構造体のコピー
@param[in] src コピー元
@param[out] dst コピー先
*/
//-----------------------------------------------------------------//
void copy_tm(const struct tm *src, struct tm *dst);
//-----------------------------------------------------------------//
/*!
@brief 「曜日」文字列を取得
@param[in] idx インデックス
@return 文字列(3文字)
*/
//-----------------------------------------------------------------//
const char* get_wday(uint8_t idx);
//-----------------------------------------------------------------//
/*!
@brief 「月」文字列を取得
@param[in] idx インデックス
@return 文字列(3文字)
*/
//-----------------------------------------------------------------//
const char* get_mon(uint8_t idx);
#ifdef __cplusplus
}
#endif
#endif // _TIME_H_