Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
gdate.h
Go to the documentation of this file.
1/* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20/*
21 * Modified by the GLib Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GLib Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GLib at ftp://ftp.gtk.org/pub/gtk/.
25 */
26
27#ifndef __G_DATE_H__
28#define __G_DATE_H__
29
30#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
31#error "Only <glib.h> can be included directly."
32#endif
33
34#include <time.h>
35
36#include <glib/gtypes.h>
37#include <glib/gquark.h>
38
40
43typedef guint8 GDateDay; /* day of the month */
44typedef struct _GDate GDate;
45
46/* enum used to specify order of appearance in parsed date strings */
47typedef enum
48{
51 G_DATE_YEAR = 2
53
54/* actual week and month values */
82
83#define G_DATE_BAD_JULIAN 0U
84#define G_DATE_BAD_DAY 0U
85#define G_DATE_BAD_YEAR 0U
86
87/* Note: directly manipulating structs is generally a bad idea, but
88 * in this case it's an *incredibly* bad idea, because all or part
89 * of this struct can be invalid at any given time. Use the functions,
90 * or you will get hosed, I promise.
91 */
92struct _GDate
93{
94 guint julian_days : 32; /* julian days representation - we use a
95 * bitfield hoping that 64 bit platforms
96 * will pack this whole struct in one big
97 * int
98 */
99
100 guint julian : 1; /* julian is valid */
101 guint dmy : 1; /* dmy is valid */
102
103 /* DMY representation */
107};
108
109/* g_date_new() returns an invalid date, you then have to _set() stuff
110 * to get a usable object. You can also allocate a GDate statically,
111 * then call g_date_clear() to initialize.
112 */
117 GDateMonth month,
118 GDateYear year);
122void g_date_free (GDate *date);
124GDate* g_date_copy (const GDate *date);
125
126/* check g_date_valid() after doing an operation that might fail, like
127 * _parse. Almost all g_date operations are undefined on invalid
128 * dates (the exceptions are the mutators, since you need those to
129 * return to validity).
130 */
145 GDateMonth month,
147
160/* First monday/sunday is the start of week 1; if we haven't reached
161 * that day, return 0. These are not ISO weeks of the year; that
162 * routine needs to be added.
163 * these functions return the number of weeks, starting on the
164 * corresponding day
165 */
172
173/* If you create a static date struct you need to clear it to get it
174 * in a safe state before use. You can clear a whole array at
175 * once with the ndates argument.
176 */
178void g_date_clear (GDate *date,
179 guint n_dates);
180
181/* The parse routine is meant for dates typed in by a user, so it
182 * permits many formats but tries to catch common typos. If your data
183 * needs to be strictly validated, it is not an appropriate function.
184 */
187 const gchar *str);
190 time_t timet);
194 GTimeVal *timeval);
197 GTime time_);
201 GDateMonth month);
204 GDateDay day);
207 GDateYear year);
210 GDateDay day,
211 GDateMonth month,
212 GDateYear y);
215 guint32 julian_date);
220
221/* To go forward by some number of weeks just go forward weeks*7 days */
224 guint n_days);
227 guint n_days);
228
229/* If you add/sub months while day > 28, the day might change */
232 guint n_months);
235 guint n_months);
236
237/* If it's feb 29, changing years can move you to the 28th */
240 guint n_years);
243 guint n_years);
253
254/* Returns the number of days between the two dates. If date2 comes
255 before date1, a negative value is return. */
258 const GDate *date2);
259
260/* qsort-friendly (with a cast...) */
263 const GDate *rhs);
265void g_date_to_struct_tm (const GDate *date,
266 struct tm *tm);
267
269void g_date_clamp (GDate *date,
270 const GDate *min_date,
271 const GDate *max_date);
272
273/* Swap date1 and date2's values if date1 > date2. */
275void g_date_order (GDate *date1, GDate *date2);
276
277/* Just like strftime() except you can only use date-related formats.
278 * Using a time format is undefined.
279 */
282 gsize slen,
283 const gchar *format,
284 const GDate *date);
285
286#define g_date_weekday g_date_get_weekday GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_weekday)
287#define g_date_month g_date_get_month GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_month)
288#define g_date_year g_date_get_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_year)
289#define g_date_day g_date_get_day GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_day)
290#define g_date_julian g_date_get_julian GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_julian)
291#define g_date_day_of_year g_date_get_day_of_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_day_of_year)
292#define g_date_monday_week_of_year g_date_get_monday_week_of_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_monday_week_of_year)
293#define g_date_sunday_week_of_year g_date_get_sunday_week_of_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_sunday_week_of_year)
294#define g_date_days_in_month g_date_get_days_in_month GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_days_in_month)
295#define g_date_monday_weeks_in_year g_date_get_monday_weeks_in_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_monday_weeks_in_year)
296#define g_date_sunday_weeks_in_year g_date_get_sunday_weeks_in_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_sunday_weeks_in_year)
297
299
300#endif /* __G_DATE_H__ */
GLIB_AVAILABLE_IN_ALL void g_date_set_dmy(GDate *date, GDateDay day, GDateMonth month, GDateYear y)
GLIB_AVAILABLE_IN_ALL guint g_date_get_day_of_year(const GDate *date)
GLIB_AVAILABLE_IN_ALL gint g_date_days_between(const GDate *date1, const GDate *date2)
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid_dmy(GDateDay day, GDateMonth month, GDateYear year) G_GNUC_CONST
G_GNUC_BEGIN_IGNORE_DEPRECATIONS void g_date_set_time_val(GDate *date, GTimeVal *timeval)
GLIB_AVAILABLE_IN_ALL void g_date_set_julian(GDate *date, guint32 julian_date)
GLIB_AVAILABLE_IN_ALL GDate * g_date_new_julian(guint32 julian_day)
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid_month(GDateMonth month) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid_year(GDateYear year) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL GDateWeekday g_date_get_weekday(const GDate *date)
GLIB_AVAILABLE_IN_ALL guint g_date_get_sunday_week_of_year(const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_set_day(GDate *date, GDateDay day)
GLIB_AVAILABLE_IN_ALL guint8 g_date_get_sunday_weeks_in_year(GDateYear year) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL guint g_date_get_iso8601_week_of_year(const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_subtract_days(GDate *date, guint n_days)
GDateDMY
Definition gdate.h:48
@ G_DATE_DAY
Definition gdate.h:49
@ G_DATE_MONTH
Definition gdate.h:50
@ G_DATE_YEAR
Definition gdate.h:51
GLIB_AVAILABLE_IN_ALL void g_date_subtract_months(GDate *date, guint n_months)
void g_date_set_time(GDate *date, GTime time_)
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid_julian(guint32 julian_date) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL void g_date_subtract_years(GDate *date, guint n_years)
GLIB_AVAILABLE_IN_ALL GDateMonth g_date_get_month(const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_set_time_t(GDate *date, time_t timet)
GLIB_AVAILABLE_IN_ALL GDate * g_date_new_dmy(GDateDay day, GDateMonth month, GDateYear year)
GLIB_AVAILABLE_IN_ALL void g_date_order(GDate *date1, GDate *date2)
GLIB_AVAILABLE_IN_ALL void g_date_add_months(GDate *date, guint n_months)
GLIB_AVAILABLE_IN_ALL gboolean g_date_is_leap_year(GDateYear year) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL guint8 g_date_get_days_in_month(GDateMonth month, GDateYear year) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid_weekday(GDateWeekday weekday) G_GNUC_CONST
G_GNUC_END_IGNORE_DEPRECATIONS GLIB_AVAILABLE_IN_ALL void g_date_set_month(GDate *date, GDateMonth month)
GLIB_AVAILABLE_IN_ALL void g_date_free(GDate *date)
GLIB_AVAILABLE_IN_ALL GDateYear g_date_get_year(const GDate *date)
guint16 GDateYear
Definition gdate.h:42
GLIB_AVAILABLE_IN_ALL gboolean g_date_is_first_of_month(const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_set_year(GDate *date, GDateYear year)
GLIB_AVAILABLE_IN_ALL void g_date_set_parse(GDate *date, const gchar *str)
GLIB_AVAILABLE_IN_ALL guint g_date_get_monday_week_of_year(const GDate *date)
GDateMonth
Definition gdate.h:67
@ G_DATE_DECEMBER
Definition gdate.h:80
@ G_DATE_FEBRUARY
Definition gdate.h:70
@ G_DATE_OCTOBER
Definition gdate.h:78
@ G_DATE_NOVEMBER
Definition gdate.h:79
@ G_DATE_JULY
Definition gdate.h:75
@ G_DATE_MAY
Definition gdate.h:73
@ G_DATE_BAD_MONTH
Definition gdate.h:68
@ G_DATE_AUGUST
Definition gdate.h:76
@ G_DATE_MARCH
Definition gdate.h:71
@ G_DATE_JUNE
Definition gdate.h:74
@ G_DATE_SEPTEMBER
Definition gdate.h:77
@ G_DATE_JANUARY
Definition gdate.h:69
@ G_DATE_APRIL
Definition gdate.h:72
guint8 GDateDay
Definition gdate.h:43
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid_day(GDateDay day) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL void g_date_clear(GDate *date, guint n_dates)
GLIB_AVAILABLE_IN_ALL gboolean g_date_valid(const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_to_struct_tm(const GDate *date, struct tm *tm)
GLIB_AVAILABLE_IN_ALL gint g_date_compare(const GDate *lhs, const GDate *rhs)
GDateWeekday
Definition gdate.h:56
@ G_DATE_THURSDAY
Definition gdate.h:61
@ G_DATE_MONDAY
Definition gdate.h:58
@ G_DATE_BAD_WEEKDAY
Definition gdate.h:57
@ G_DATE_SUNDAY
Definition gdate.h:64
@ G_DATE_WEDNESDAY
Definition gdate.h:60
@ G_DATE_SATURDAY
Definition gdate.h:63
@ G_DATE_TUESDAY
Definition gdate.h:59
@ G_DATE_FRIDAY
Definition gdate.h:62
GLIB_AVAILABLE_IN_ALL void g_date_add_days(GDate *date, guint n_days)
GLIB_AVAILABLE_IN_ALL guint32 g_date_get_julian(const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_clamp(GDate *date, const GDate *min_date, const GDate *max_date)
GLIB_AVAILABLE_IN_2_56 GDate * g_date_copy(const GDate *date)
GLIB_AVAILABLE_IN_ALL gsize g_date_strftime(gchar *s, gsize slen, const gchar *format, const GDate *date)
GLIB_AVAILABLE_IN_ALL void g_date_add_years(GDate *date, guint n_years)
GLIB_AVAILABLE_IN_ALL GDateDay g_date_get_day(const GDate *date)
GLIB_AVAILABLE_IN_ALL gboolean g_date_is_last_of_month(const GDate *date)
GLIB_AVAILABLE_IN_ALL GDate * g_date_new(void)
GLIB_AVAILABLE_IN_ALL guint8 g_date_get_monday_weeks_in_year(GDateYear year) G_GNUC_CONST
struct _GDateTime GDateTime
Definition gdatetime.h:122
#define GLIB_DEPRECATED_IN_2_62_FOR(f)
#define GLIB_DEPRECATED_TYPE_IN_2_62_FOR(f)
#define GLIB_DEPRECATED_FOR(f)
#define GLIB_AVAILABLE_IN_ALL
#define GLIB_AVAILABLE_IN_2_56
unsigned int guint32
Definition glibconfig.h:57
unsigned short guint16
Definition glibconfig.h:49
unsigned char guint8
Definition glibconfig.h:46
unsigned long gsize
Definition glibconfig.h:83
signed int gint32
Definition glibconfig.h:56
#define G_END_DECLS
Definition gmacros.h:910
#define G_BEGIN_DECLS
Definition gmacros.h:909
#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Definition gmacros.h:771
#define G_GNUC_CONST
Definition gmacros.h:637
#define G_GNUC_END_IGNORE_DEPRECATIONS
Definition gmacros.h:772
gint gboolean
Definition gtypes.h:56
G_BEGIN_DECLS typedef char gchar
Definition gtypes.h:52
int gint
Definition gtypes.h:55
unsigned int guint
Definition gtypes.h:61
json_t format(printf, 1, 2)))
CURL_EXTERN CURLMcode curl_socket_t s
Definition multi.h:318
Definition gdate.h:93
guint julian_days
Definition gdate.h:94
guint month
Definition gdate.h:105
guint year
Definition gdate.h:106
guint julian
Definition gdate.h:100
guint day
Definition gdate.h:104
guint dmy
Definition gdate.h:101