datetime: Rework time zone support in constructors
[platform/upstream/glib.git] / glib / gdatetime.h
1 /* gdatetime.h
2  *
3  * Copyright (C) 2009-2010 Christian Hergert <chris@dronelabs.com>
4  *
5  * This is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19
20 #if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
21 #error "Only <glib.h> can be included directly."
22 #endif
23
24 #ifndef __G_DATE_TIME_H__
25 #define __G_DATE_TIME_H__
26
27 #include <time.h>
28 #include <glib/gtypes.h>
29
30 G_BEGIN_DECLS
31
32 /**
33  * G_TIME_SPAN_DAY:
34  *
35  * Evaluates to a time span of one day.
36  *
37  * Since: 2.26
38  */
39 #define G_TIME_SPAN_DAY                 (G_GINT64_CONSTANT (86400000000))
40
41 /**
42  * G_TIME_SPAN_HOUR:
43  *
44  * Evaluates to a time span of one hour.
45  *
46  * Since: 2.26
47  */
48 #define G_TIME_SPAN_HOUR                (G_GINT64_CONSTANT (3600000000))
49
50 /**
51  * G_TIME_SPAN_MINUTE:
52  *
53  * Evaluates to a time span of one minute.
54  *
55  * Since: 2.26
56  */
57 #define G_TIME_SPAN_MINUTE              (G_GINT64_CONSTANT (60000000))
58
59 /**
60  * G_TIME_SPAN_SECOND:
61  *
62  * Evaluates to a time span of one second.
63  *
64  * Since: 2.26
65  */
66 #define G_TIME_SPAN_SECOND              (G_GINT64_CONSTANT (1000000))
67
68 /**
69  * G_TIME_SPAN_MILLISECOND:
70  *
71  * Evaluates to a time span of one millisecond.
72  *
73  * Since: 2.26
74  */
75 #define G_TIME_SPAN_MILLISECOND         (G_GINT64_CONSTANT (1000))
76
77 /**
78  * GTimeSpan:
79  *
80  * A value representing an interval of time, in microseconds.
81  *
82  * Since: 2.26
83  */
84 typedef gint64 GTimeSpan;
85
86 /**
87  * GTimeZone:
88  *
89  * <structname>GTimeZone</structname> is an opaque structure whose members
90  * cannot be accessed directly.
91  *
92  * Since: 2.26
93  */
94 typedef struct _GTimeZone GTimeZone;
95
96 /**
97  * GDateTime:
98  *
99  * <structname>GDateTime</structname> is an opaque structure whose members
100  * cannot be accessed directly.
101  *
102  * Since: 2.26
103  */
104 typedef struct _GDateTime GDateTime;
105
106 GDateTime *           g_date_time_new_now                (void);
107 GDateTime *           g_date_time_new_today              (void);
108 GDateTime *           g_date_time_new_utc_now            (void);
109 GDateTime *           g_date_time_new_from_date          (gint             year,
110                                                           gint             month,
111                                                           gint             day);
112 GDateTime *           g_date_time_new_from_epoch         (gint64           secs);
113 GDateTime *           g_date_time_new_from_timeval       (GTimeVal        *tv);
114 GDateTime *           g_date_time_new_full               (gint             year,
115                                                           gint             month,
116                                                           gint             day,
117                                                           gint             hour,
118                                                           gint             minute,
119                                                           gint             second,
120                                                           const GTimeZone *time_zone);
121
122 GDateTime *           g_date_time_ref                    (GDateTime       *datetime);
123 void                  g_date_time_unref                  (GDateTime       *datetime);
124
125 GDateTime *           g_date_time_add                    (const GDateTime *datetime,
126                                                           GTimeSpan        timespan);
127 GDateTime *           g_date_time_add_days               (const GDateTime *datetime,
128                                                           gint             days);
129 GDateTime *           g_date_time_add_hours              (const GDateTime *datetime,
130                                                           gint             hours);
131 GDateTime *           g_date_time_add_milliseconds       (const GDateTime *datetime,
132                                                           gint             milliseconds);
133 GDateTime *           g_date_time_add_minutes            (const GDateTime *datetime,
134                                                           gint             minutes);
135 GDateTime *           g_date_time_add_months             (const GDateTime *datetime,
136                                                           gint             months);
137 GDateTime *           g_date_time_add_seconds            (const GDateTime *datetime,
138                                                           gint             seconds);
139 GDateTime *           g_date_time_add_weeks              (const GDateTime *datetime,
140                                                           gint             weeks);
141 GDateTime *           g_date_time_add_years              (const GDateTime *datetime,
142                                                           gint             years);
143 GDateTime *           g_date_time_add_full               (const GDateTime *datetime,
144                                                           gint             years,
145                                                           gint             months,
146                                                           gint             days,
147                                                           gint             hours,
148                                                           gint             minutes,
149                                                           gint             seconds);
150
151 GDateTime *           g_date_time_day                    (const GDateTime  *datetime);
152
153 gint                  g_date_time_compare                (gconstpointer   dt1,
154                                                           gconstpointer   dt2);
155 gboolean              g_date_time_equal                  (gconstpointer   dt1,
156                                                           gconstpointer   dt2);
157 guint                 g_date_time_hash                   (gconstpointer   datetime);
158
159 GTimeSpan             g_date_time_difference             (const GDateTime *begin,
160                                                           const GDateTime *end);
161
162 void                  g_date_time_get_julian             (const GDateTime *datetime,
163                                                           gint            *period,
164                                                           gint            *julian,
165                                                           gint            *hour,
166                                                           gint            *minute,
167                                                           gint            *second);
168 gint                  g_date_time_get_hour               (const GDateTime *datetime);
169 gint                  g_date_time_get_minute             (const GDateTime *datetime);
170 gint                  g_date_time_get_second             (const GDateTime *datetime);
171 gint                  g_date_time_get_millisecond        (const GDateTime *datetime);
172 gint                  g_date_time_get_microsecond        (const GDateTime *datetime);
173 gint                  g_date_time_get_day_of_week        (const GDateTime *datetime);
174 gint                  g_date_time_get_day_of_month       (const GDateTime *datetime);
175 gint                  g_date_time_get_week_of_year       (const GDateTime *datetime);
176 gint                  g_date_time_get_day_of_year        (const GDateTime *datetime);
177 gint                  g_date_time_get_month              (const GDateTime *datetime);
178 gint                  g_date_time_get_year               (const GDateTime *datetime);
179 void                  g_date_time_get_dmy                (const GDateTime *datetime,
180                                                           gint            *day,
181                                                           gint            *month,
182                                                           gint            *year);
183
184 GTimeSpan             g_date_time_get_utc_offset         (const GDateTime *datetime);
185 G_CONST_RETURN gchar *g_date_time_get_timezone_name      (const GDateTime *datetime);
186 gboolean              g_date_time_is_daylight_savings    (const GDateTime *datetime);
187
188 gboolean              g_date_time_is_leap_year           (const GDateTime *datetime);
189
190 GDateTime *           g_date_time_to_local               (const GDateTime *datetime);
191 gint64                g_date_time_to_epoch               (const GDateTime *datetime);
192 void                  g_date_time_to_timeval             (const GDateTime *datetime,
193                                                           GTimeVal        *tv);
194 GDateTime *           g_date_time_to_utc                 (const GDateTime *datetime);
195 gchar *               g_date_time_printf                 (const GDateTime *datetime,
196                                                           const gchar     *format) G_GNUC_MALLOC;
197
198 GTimeZone *           g_time_zone_new                    (gint             offset,
199                                                           gboolean         is_dst);
200 GTimeZone *           g_time_zone_new_for_name           (const gchar     *name);
201 GTimeZone *           g_time_zone_new_utc                (void);
202 GTimeZone *           g_time_zone_new_local              (void);
203 GTimeZone *           g_time_zone_copy                   (const GTimeZone *time_zone);
204 void                  g_time_zone_free                   (GTimeZone       *time_zone);
205 G_CONST_RETURN gchar *g_time_zone_get_name               (const GTimeZone *time_zone);
206 gint                  g_time_zone_get_offset             (const GTimeZone *time_zone);
207 gboolean              g_time_zone_get_is_dst             (const GTimeZone *time_zone);
208 gboolean              g_time_zone_is_floating            (const GTimeZone *time_zone);
209
210 G_END_DECLS
211
212 #endif /* __G_DATE_TIME_H__ */