Coverage Report

Created: 2026-09-14 07:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/usr/local/include/glib-2.0/glib/gdatetime.h
Line
Count
Source
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
/**
306
 * g_set_date_time: (skip)
307
 * @date_time_pointer: (inout) (not optional) (nullable): a pointer to either
308
 *   a date-time or `NULL`
309
 * @new_date_time: (nullable): a date-time to assign to @date_time_pointer
310
 *
311
 * Updates a pointer to a date-time to @new_date_time and returns whether
312
 * @date_time_pointer was changed.
313
 *
314
 * If @new_date_time matches the previous date time, this function is a no-op.
315
 * If @new_date_time is different, its ref-count will be increased and it will
316
 * be assigned to @date_time_pointer.
317
 * The previous date time pointed to by @date_time_pointer will have its
318
 * ref-count decreased.
319
 *
320
 * Note two date-time objects that represent the same instant in different
321
 * timezones are not considered equal.
322
 *
323
 * @date_time_pointer must not be `NULL`, but can point to a `NULL` value.
324
 *
325
 * Returns: true if the value of @date_time_pointer changed, false otherwise
326
 *
327
 * Since: 2.90
328
 */
329
GLIB_AVAILABLE_STATIC_INLINE_IN_2_90
330
static inline gboolean g_set_date_time (GDateTime **date_time_pointer,
331
                                        GDateTime  *new_date_time);
332
333
GLIB_AVAILABLE_STATIC_INLINE_IN_2_90
334
static inline gboolean
335
g_set_date_time (GDateTime **date_time_pointer,
336
                 GDateTime  *new_date_time)
337
0
{
338
0
  GDateTime *old_date_time;
339
0
340
0
  if (*date_time_pointer == new_date_time ||
341
0
      (*date_time_pointer != NULL &&
342
0
       new_date_time != NULL &&
343
0
       g_date_time_compare (*date_time_pointer, new_date_time) == 0 &&
344
0
       (g_date_time_get_timezone_abbreviation (*date_time_pointer) ==
345
0
        g_date_time_get_timezone_abbreviation (new_date_time))))
346
0
    {
347
0
      return FALSE;
348
0
    }
349
0
350
0
  if (new_date_time != NULL)
351
0
    {
352
0
      g_date_time_ref (new_date_time);
353
0
    }
354
0
355
0
  old_date_time = *date_time_pointer;
356
0
  *date_time_pointer = new_date_time;
357
0
358
0
  if (old_date_time != NULL)
359
0
    {
360
0
      g_date_time_unref (old_date_time);
361
0
    }
362
0
363
0
  return TRUE;
364
0
}
Unexecuted instantiation: fuzz_gobex.c:g_set_date_time
Unexecuted instantiation: gobex-apparam.c:g_set_date_time
Unexecuted instantiation: gobex-defs.c:g_set_date_time
Unexecuted instantiation: gobex-header.c:g_set_date_time
Unexecuted instantiation: gobex-packet.c:g_set_date_time
Unexecuted instantiation: gobex-transfer.c:g_set_date_time
Unexecuted instantiation: gobex.c:g_set_date_time
Unexecuted instantiation: sdp-xml.c:g_set_date_time
365
366
G_END_DECLS
367
368
#endif /* __G_DATE_TIME_H__ */