1 | /* |
2 | * Copyright (C) 2009-2010 Christian Hergert <chris@dronelabs.com> |
3 | * Copyright © 2010 Codethink Limited |
4 | * |
5 | * SPDX-License-Identifier: LGPL-2.1-or-later |
6 | * |
7 | * This library is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU Lesser General Public License as |
9 | * published by the Free Software Foundation; either version 2.1 of the |
10 | * licence, or (at your option) any later version. |
11 | * |
12 | * This is distributed in the hope that it will be useful, but WITHOUT |
13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
15 | * License for more details. |
16 | * |
17 | * You should have received a copy of the GNU Lesser General Public License |
18 | * along with this library; if not, see <http://www.gnu.org/licenses/>. |
19 | * |
20 | * Authors: Christian Hergert <chris@dronelabs.com> |
21 | * Thiago Santos <thiago.sousa.santos@collabora.co.uk> |
22 | * Emmanuele Bassi <ebassi@linux.intel.com> |
23 | * Ryan Lortie <desrt@desrt.ca> |
24 | */ |
25 | |
26 | #ifndef __G_DATE_TIME_H__ |
27 | #define __G_DATE_TIME_H__ |
28 | |
29 | #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) |
30 | #error "Only <glib.h> can be included directly." |
31 | #endif |
32 | |
33 | #include <glib/gtimezone.h> |
34 | |
35 | G_BEGIN_DECLS |
36 | |
37 | /** |
38 | * G_TIME_SPAN_DAY: |
39 | * |
40 | * Evaluates to a time span of one day. |
41 | * |
42 | * Since: 2.26 |
43 | */ |
44 | #define G_TIME_SPAN_DAY (G_GINT64_CONSTANT (86400000000)) |
45 | |
46 | /** |
47 | * G_TIME_SPAN_HOUR: |
48 | * |
49 | * Evaluates to a time span of one hour. |
50 | * |
51 | * Since: 2.26 |
52 | */ |
53 | #define G_TIME_SPAN_HOUR (G_GINT64_CONSTANT (3600000000)) |
54 | |
55 | /** |
56 | * G_TIME_SPAN_MINUTE: |
57 | * |
58 | * Evaluates to a time span of one minute. |
59 | * |
60 | * Since: 2.26 |
61 | */ |
62 | #define G_TIME_SPAN_MINUTE (G_GINT64_CONSTANT (60000000)) |
63 | |
64 | /** |
65 | * G_TIME_SPAN_SECOND: |
66 | * |
67 | * Evaluates to a time span of one second. |
68 | * |
69 | * Since: 2.26 |
70 | */ |
71 | #define G_TIME_SPAN_SECOND (G_GINT64_CONSTANT (1000000)) |
72 | |
73 | /** |
74 | * G_TIME_SPAN_MILLISECOND: |
75 | * |
76 | * Evaluates to a time span of one millisecond. |
77 | * |
78 | * Since: 2.26 |
79 | */ |
80 | #define G_TIME_SPAN_MILLISECOND (G_GINT64_CONSTANT (1000)) |
81 | |
82 | /** |
83 | * GTimeSpan: |
84 | * |
85 | * A value representing an interval of time, in microseconds. |
86 | * |
87 | * Since: 2.26 |
88 | */ |
89 | typedef gint64 GTimeSpan; |
90 | |
91 | /** |
92 | * GDateTime: |
93 | * |
94 | * `GDateTime` is a structure that combines a Gregorian date and time |
95 | * into a single structure. |
96 | * |
97 | * `GDateTime` provides many conversion and methods to manipulate dates and times. |
98 | * Time precision is provided down to microseconds and the time can range |
99 | * (proleptically) from 0001-01-01 00:00:00 to 9999-12-31 23:59:59.999999. |
100 | * `GDateTime` follows POSIX time in the sense that it is oblivious to leap |
101 | * seconds. |
102 | * |
103 | * `GDateTime` is an immutable object; once it has been created it cannot |
104 | * be modified further. All modifiers will create a new `GDateTime`. |
105 | * Nearly all such functions can fail due to the date or time going out |
106 | * of range, in which case %NULL will be returned. |
107 | * |
108 | * `GDateTime` is reference counted: the reference count is increased by calling |
109 | * [method@GLib.DateTime.ref] and decreased by calling [method@GLib.DateTime.unref]. |
110 | * When the reference count drops to 0, the resources allocated by the `GDateTime` |
111 | * structure are released. |
112 | * |
113 | * Many parts of the API may produce non-obvious results. As an |
114 | * example, adding two months to January 31st will yield March 31st |
115 | * whereas adding one month and then one month again will yield either |
116 | * March 28th or March 29th. Also note that adding 24 hours is not |
117 | * always the same as adding one day (since days containing daylight |
118 | * savings time transitions are either 23 or 25 hours in length). |
119 | * |
120 | * Since: 2.26 |
121 | */ |
122 | typedef struct _GDateTime GDateTime; |
123 | |
124 | GLIB_AVAILABLE_IN_ALL |
125 | void g_date_time_unref (GDateTime *datetime); |
126 | GLIB_AVAILABLE_IN_ALL |
127 | GDateTime * g_date_time_ref (GDateTime *datetime); |
128 | |
129 | GLIB_AVAILABLE_IN_ALL |
130 | GDateTime * g_date_time_new_now (GTimeZone *tz); |
131 | GLIB_AVAILABLE_IN_ALL |
132 | GDateTime * g_date_time_new_now_local (void); |
133 | GLIB_AVAILABLE_IN_ALL |
134 | GDateTime * g_date_time_new_now_utc (void); |
135 | |
136 | GLIB_AVAILABLE_IN_ALL |
137 | GDateTime * g_date_time_new_from_unix_local (gint64 t); |
138 | GLIB_AVAILABLE_IN_ALL |
139 | GDateTime * g_date_time_new_from_unix_utc (gint64 t); |
140 | |
141 | GLIB_AVAILABLE_IN_2_80 |
142 | GDateTime * g_date_time_new_from_unix_local_usec (gint64 usecs); |
143 | GLIB_AVAILABLE_IN_2_80 |
144 | GDateTime * g_date_time_new_from_unix_utc_usec (gint64 usecs); |
145 | |
146 | G_GNUC_BEGIN_IGNORE_DEPRECATIONS |
147 | GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_new_from_unix_local) |
148 | GDateTime * g_date_time_new_from_timeval_local (const GTimeVal *tv); |
149 | GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_new_from_unix_utc) |
150 | GDateTime * g_date_time_new_from_timeval_utc (const GTimeVal *tv); |
151 | G_GNUC_END_IGNORE_DEPRECATIONS |
152 | |
153 | GLIB_AVAILABLE_IN_2_56 |
154 | GDateTime * g_date_time_new_from_iso8601 (const gchar *text, |
155 | GTimeZone *default_tz); |
156 | |
157 | GLIB_AVAILABLE_IN_ALL |
158 | GDateTime * g_date_time_new (GTimeZone *tz, |
159 | gint year, |
160 | gint month, |
161 | gint day, |
162 | gint hour, |
163 | gint minute, |
164 | gdouble seconds); |
165 | GLIB_AVAILABLE_IN_ALL |
166 | GDateTime * g_date_time_new_local (gint year, |
167 | gint month, |
168 | gint day, |
169 | gint hour, |
170 | gint minute, |
171 | gdouble seconds); |
172 | GLIB_AVAILABLE_IN_ALL |
173 | GDateTime * g_date_time_new_utc (gint year, |
174 | gint month, |
175 | gint day, |
176 | gint hour, |
177 | gint minute, |
178 | gdouble seconds); |
179 | |
180 | GLIB_AVAILABLE_IN_ALL |
181 | G_GNUC_WARN_UNUSED_RESULT |
182 | GDateTime * g_date_time_add (GDateTime *datetime, |
183 | GTimeSpan timespan); |
184 | |
185 | GLIB_AVAILABLE_IN_ALL |
186 | G_GNUC_WARN_UNUSED_RESULT |
187 | GDateTime * g_date_time_add_years (GDateTime *datetime, |
188 | gint years); |
189 | GLIB_AVAILABLE_IN_ALL |
190 | G_GNUC_WARN_UNUSED_RESULT |
191 | GDateTime * g_date_time_add_months (GDateTime *datetime, |
192 | gint months); |
193 | GLIB_AVAILABLE_IN_ALL |
194 | G_GNUC_WARN_UNUSED_RESULT |
195 | GDateTime * g_date_time_add_weeks (GDateTime *datetime, |
196 | gint weeks); |
197 | GLIB_AVAILABLE_IN_ALL |
198 | G_GNUC_WARN_UNUSED_RESULT |
199 | GDateTime * g_date_time_add_days (GDateTime *datetime, |
200 | gint days); |
201 | |
202 | GLIB_AVAILABLE_IN_ALL |
203 | G_GNUC_WARN_UNUSED_RESULT |
204 | GDateTime * g_date_time_add_hours (GDateTime *datetime, |
205 | gint hours); |
206 | GLIB_AVAILABLE_IN_ALL |
207 | G_GNUC_WARN_UNUSED_RESULT |
208 | GDateTime * g_date_time_add_minutes (GDateTime *datetime, |
209 | gint minutes); |
210 | GLIB_AVAILABLE_IN_ALL |
211 | G_GNUC_WARN_UNUSED_RESULT |
212 | GDateTime * g_date_time_add_seconds (GDateTime *datetime, |
213 | gdouble seconds); |
214 | |
215 | GLIB_AVAILABLE_IN_ALL |
216 | G_GNUC_WARN_UNUSED_RESULT |
217 | GDateTime * g_date_time_add_full (GDateTime *datetime, |
218 | gint years, |
219 | gint months, |
220 | gint days, |
221 | gint hours, |
222 | gint minutes, |
223 | gdouble seconds); |
224 | |
225 | GLIB_AVAILABLE_IN_ALL |
226 | gint g_date_time_compare (gconstpointer dt1, |
227 | gconstpointer dt2); |
228 | GLIB_AVAILABLE_IN_ALL |
229 | GTimeSpan g_date_time_difference (GDateTime *end, |
230 | GDateTime *begin); |
231 | GLIB_AVAILABLE_IN_ALL |
232 | guint g_date_time_hash (gconstpointer datetime); |
233 | GLIB_AVAILABLE_IN_ALL |
234 | gboolean g_date_time_equal (gconstpointer dt1, |
235 | gconstpointer dt2); |
236 | |
237 | GLIB_AVAILABLE_IN_ALL |
238 | void g_date_time_get_ymd (GDateTime *datetime, |
239 | gint *year, |
240 | gint *month, |
241 | gint *day); |
242 | |
243 | GLIB_AVAILABLE_IN_ALL |
244 | gint g_date_time_get_year (GDateTime *datetime); |
245 | GLIB_AVAILABLE_IN_ALL |
246 | gint g_date_time_get_month (GDateTime *datetime); |
247 | GLIB_AVAILABLE_IN_ALL |
248 | gint g_date_time_get_day_of_month (GDateTime *datetime); |
249 | |
250 | GLIB_AVAILABLE_IN_ALL |
251 | gint g_date_time_get_week_numbering_year (GDateTime *datetime); |
252 | GLIB_AVAILABLE_IN_ALL |
253 | gint g_date_time_get_week_of_year (GDateTime *datetime); |
254 | GLIB_AVAILABLE_IN_ALL |
255 | gint g_date_time_get_day_of_week (GDateTime *datetime); |
256 | |
257 | GLIB_AVAILABLE_IN_ALL |
258 | gint g_date_time_get_day_of_year (GDateTime *datetime); |
259 | |
260 | GLIB_AVAILABLE_IN_ALL |
261 | gint g_date_time_get_hour (GDateTime *datetime); |
262 | GLIB_AVAILABLE_IN_ALL |
263 | gint g_date_time_get_minute (GDateTime *datetime); |
264 | GLIB_AVAILABLE_IN_ALL |
265 | gint g_date_time_get_second (GDateTime *datetime); |
266 | GLIB_AVAILABLE_IN_ALL |
267 | gint g_date_time_get_microsecond (GDateTime *datetime); |
268 | GLIB_AVAILABLE_IN_ALL |
269 | gdouble g_date_time_get_seconds (GDateTime *datetime); |
270 | |
271 | GLIB_AVAILABLE_IN_ALL |
272 | gint64 g_date_time_to_unix (GDateTime *datetime); |
273 | GLIB_AVAILABLE_IN_2_80 |
274 | gint64 g_date_time_to_unix_usec (GDateTime *datetime); |
275 | |
276 | G_GNUC_BEGIN_IGNORE_DEPRECATIONS |
277 | GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_to_unix) |
278 | gboolean g_date_time_to_timeval (GDateTime *datetime, |
279 | GTimeVal *tv); |
280 | G_GNUC_END_IGNORE_DEPRECATIONS |
281 | |
282 | GLIB_AVAILABLE_IN_ALL |
283 | GTimeSpan g_date_time_get_utc_offset (GDateTime *datetime); |
284 | GLIB_AVAILABLE_IN_2_58 |
285 | GTimeZone * g_date_time_get_timezone (GDateTime *datetime); |
286 | GLIB_AVAILABLE_IN_ALL |
287 | const gchar * g_date_time_get_timezone_abbreviation (GDateTime *datetime); |
288 | GLIB_AVAILABLE_IN_ALL |
289 | gboolean g_date_time_is_daylight_savings (GDateTime *datetime); |
290 | |
291 | GLIB_AVAILABLE_IN_ALL |
292 | GDateTime * g_date_time_to_timezone (GDateTime *datetime, |
293 | GTimeZone *tz); |
294 | GLIB_AVAILABLE_IN_ALL |
295 | GDateTime * g_date_time_to_local (GDateTime *datetime); |
296 | GLIB_AVAILABLE_IN_ALL |
297 | GDateTime * g_date_time_to_utc (GDateTime *datetime); |
298 | |
299 | GLIB_AVAILABLE_IN_ALL |
300 | gchar * g_date_time_format (GDateTime *datetime, |
301 | const gchar *format) G_GNUC_MALLOC; |
302 | GLIB_AVAILABLE_IN_2_62 |
303 | gchar * g_date_time_format_iso8601 (GDateTime *datetime) G_GNUC_MALLOC; |
304 | |
305 | G_END_DECLS |
306 | |
307 | #endif /* __G_DATE_TIME_H__ */ |
308 | |