glib/auto/
date_time.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::{ffi, translate::*, BoolError, TimeSpan, TimeZone};
6
7crate::wrapper! {
8    #[derive(Debug)]
9    pub struct DateTime(Shared<ffi::GDateTime>);
10
11    match fn {
12        ref => |ptr| ffi::g_date_time_ref(ptr),
13        unref => |ptr| ffi::g_date_time_unref(ptr),
14        type_ => || ffi::g_date_time_get_type(),
15    }
16}
17
18impl DateTime {
19    #[doc(alias = "g_date_time_new")]
20    pub fn new(
21        tz: &TimeZone,
22        year: i32,
23        month: i32,
24        day: i32,
25        hour: i32,
26        minute: i32,
27        seconds: f64,
28    ) -> Result<DateTime, BoolError> {
29        unsafe {
30            Option::<_>::from_glib_full(ffi::g_date_time_new(
31                tz.to_glib_none().0,
32                year,
33                month,
34                day,
35                hour,
36                minute,
37                seconds,
38            ))
39            .ok_or_else(|| crate::bool_error!("Invalid date"))
40        }
41    }
42
43    #[doc(alias = "g_date_time_new_from_iso8601")]
44    #[doc(alias = "new_from_iso8601")]
45    pub fn from_iso8601(text: &str, default_tz: Option<&TimeZone>) -> Result<DateTime, BoolError> {
46        unsafe {
47            Option::<_>::from_glib_full(ffi::g_date_time_new_from_iso8601(
48                text.to_glib_none().0,
49                default_tz.to_glib_none().0,
50            ))
51            .ok_or_else(|| crate::bool_error!("Invalid date"))
52        }
53    }
54
55    //#[cfg_attr(feature = "v2_62", deprecated = "Since 2.62")]
56    //#[allow(deprecated)]
57    //#[doc(alias = "g_date_time_new_from_timeval_local")]
58    //#[doc(alias = "new_from_timeval_local")]
59    //pub fn from_timeval_local(tv: /*Ignored*/&TimeVal) -> Result<DateTime, BoolError> {
60    //    unsafe { TODO: call ffi:g_date_time_new_from_timeval_local() }
61    //}
62
63    //#[cfg_attr(feature = "v2_62", deprecated = "Since 2.62")]
64    //#[allow(deprecated)]
65    //#[doc(alias = "g_date_time_new_from_timeval_utc")]
66    //#[doc(alias = "new_from_timeval_utc")]
67    //pub fn from_timeval_utc(tv: /*Ignored*/&TimeVal) -> Result<DateTime, BoolError> {
68    //    unsafe { TODO: call ffi:g_date_time_new_from_timeval_utc() }
69    //}
70
71    #[doc(alias = "g_date_time_new_from_unix_local")]
72    #[doc(alias = "new_from_unix_local")]
73    pub fn from_unix_local(t: i64) -> Result<DateTime, BoolError> {
74        unsafe {
75            Option::<_>::from_glib_full(ffi::g_date_time_new_from_unix_local(t))
76                .ok_or_else(|| crate::bool_error!("Invalid date"))
77        }
78    }
79
80    #[cfg(feature = "v2_80")]
81    #[cfg_attr(docsrs, doc(cfg(feature = "v2_80")))]
82    #[doc(alias = "g_date_time_new_from_unix_local_usec")]
83    #[doc(alias = "new_from_unix_local_usec")]
84    pub fn from_unix_local_usec(usecs: i64) -> Result<DateTime, BoolError> {
85        unsafe {
86            Option::<_>::from_glib_full(ffi::g_date_time_new_from_unix_local_usec(usecs))
87                .ok_or_else(|| crate::bool_error!("Invalid date"))
88        }
89    }
90
91    #[doc(alias = "g_date_time_new_from_unix_utc")]
92    #[doc(alias = "new_from_unix_utc")]
93    pub fn from_unix_utc(t: i64) -> Result<DateTime, BoolError> {
94        unsafe {
95            Option::<_>::from_glib_full(ffi::g_date_time_new_from_unix_utc(t))
96                .ok_or_else(|| crate::bool_error!("Invalid date"))
97        }
98    }
99
100    #[cfg(feature = "v2_80")]
101    #[cfg_attr(docsrs, doc(cfg(feature = "v2_80")))]
102    #[doc(alias = "g_date_time_new_from_unix_utc_usec")]
103    #[doc(alias = "new_from_unix_utc_usec")]
104    pub fn from_unix_utc_usec(usecs: i64) -> Result<DateTime, BoolError> {
105        unsafe {
106            Option::<_>::from_glib_full(ffi::g_date_time_new_from_unix_utc_usec(usecs))
107                .ok_or_else(|| crate::bool_error!("Invalid date"))
108        }
109    }
110
111    #[doc(alias = "g_date_time_new_local")]
112    #[doc(alias = "new_local")]
113    pub fn from_local(
114        year: i32,
115        month: i32,
116        day: i32,
117        hour: i32,
118        minute: i32,
119        seconds: f64,
120    ) -> Result<DateTime, BoolError> {
121        unsafe {
122            Option::<_>::from_glib_full(ffi::g_date_time_new_local(
123                year, month, day, hour, minute, seconds,
124            ))
125            .ok_or_else(|| crate::bool_error!("Invalid date"))
126        }
127    }
128
129    #[doc(alias = "g_date_time_new_now")]
130    #[doc(alias = "new_now")]
131    pub fn now(tz: &TimeZone) -> Result<DateTime, BoolError> {
132        unsafe {
133            Option::<_>::from_glib_full(ffi::g_date_time_new_now(tz.to_glib_none().0))
134                .ok_or_else(|| crate::bool_error!("Invalid date"))
135        }
136    }
137
138    #[doc(alias = "g_date_time_new_now_local")]
139    #[doc(alias = "new_now_local")]
140    pub fn now_local() -> Result<DateTime, BoolError> {
141        unsafe {
142            Option::<_>::from_glib_full(ffi::g_date_time_new_now_local())
143                .ok_or_else(|| crate::bool_error!("Invalid date"))
144        }
145    }
146
147    #[doc(alias = "g_date_time_new_now_utc")]
148    #[doc(alias = "new_now_utc")]
149    pub fn now_utc() -> Result<DateTime, BoolError> {
150        unsafe {
151            Option::<_>::from_glib_full(ffi::g_date_time_new_now_utc())
152                .ok_or_else(|| crate::bool_error!("Invalid date"))
153        }
154    }
155
156    #[doc(alias = "g_date_time_new_utc")]
157    #[doc(alias = "new_utc")]
158    pub fn from_utc(
159        year: i32,
160        month: i32,
161        day: i32,
162        hour: i32,
163        minute: i32,
164        seconds: f64,
165    ) -> Result<DateTime, BoolError> {
166        unsafe {
167            Option::<_>::from_glib_full(ffi::g_date_time_new_utc(
168                year, month, day, hour, minute, seconds,
169            ))
170            .ok_or_else(|| crate::bool_error!("Invalid date"))
171        }
172    }
173
174    #[doc(alias = "g_date_time_add")]
175    pub fn add(&self, timespan: TimeSpan) -> Result<DateTime, BoolError> {
176        unsafe {
177            Option::<_>::from_glib_full(ffi::g_date_time_add(
178                self.to_glib_none().0,
179                timespan.into_glib(),
180            ))
181            .ok_or_else(|| crate::bool_error!("Invalid date"))
182        }
183    }
184
185    #[doc(alias = "g_date_time_add_days")]
186    pub fn add_days(&self, days: i32) -> Result<DateTime, BoolError> {
187        unsafe {
188            Option::<_>::from_glib_full(ffi::g_date_time_add_days(self.to_glib_none().0, days))
189                .ok_or_else(|| crate::bool_error!("Invalid date"))
190        }
191    }
192
193    #[doc(alias = "g_date_time_add_full")]
194    pub fn add_full(
195        &self,
196        years: i32,
197        months: i32,
198        days: i32,
199        hours: i32,
200        minutes: i32,
201        seconds: f64,
202    ) -> Result<DateTime, BoolError> {
203        unsafe {
204            Option::<_>::from_glib_full(ffi::g_date_time_add_full(
205                self.to_glib_none().0,
206                years,
207                months,
208                days,
209                hours,
210                minutes,
211                seconds,
212            ))
213            .ok_or_else(|| crate::bool_error!("Invalid date"))
214        }
215    }
216
217    #[doc(alias = "g_date_time_add_hours")]
218    pub fn add_hours(&self, hours: i32) -> Result<DateTime, BoolError> {
219        unsafe {
220            Option::<_>::from_glib_full(ffi::g_date_time_add_hours(self.to_glib_none().0, hours))
221                .ok_or_else(|| crate::bool_error!("Invalid date"))
222        }
223    }
224
225    #[doc(alias = "g_date_time_add_minutes")]
226    pub fn add_minutes(&self, minutes: i32) -> Result<DateTime, BoolError> {
227        unsafe {
228            Option::<_>::from_glib_full(ffi::g_date_time_add_minutes(
229                self.to_glib_none().0,
230                minutes,
231            ))
232            .ok_or_else(|| crate::bool_error!("Invalid date"))
233        }
234    }
235
236    #[doc(alias = "g_date_time_add_months")]
237    pub fn add_months(&self, months: i32) -> Result<DateTime, BoolError> {
238        unsafe {
239            Option::<_>::from_glib_full(ffi::g_date_time_add_months(self.to_glib_none().0, months))
240                .ok_or_else(|| crate::bool_error!("Invalid date"))
241        }
242    }
243
244    #[doc(alias = "g_date_time_add_seconds")]
245    pub fn add_seconds(&self, seconds: f64) -> Result<DateTime, BoolError> {
246        unsafe {
247            Option::<_>::from_glib_full(ffi::g_date_time_add_seconds(
248                self.to_glib_none().0,
249                seconds,
250            ))
251            .ok_or_else(|| crate::bool_error!("Invalid date"))
252        }
253    }
254
255    #[doc(alias = "g_date_time_add_weeks")]
256    pub fn add_weeks(&self, weeks: i32) -> Result<DateTime, BoolError> {
257        unsafe {
258            Option::<_>::from_glib_full(ffi::g_date_time_add_weeks(self.to_glib_none().0, weeks))
259                .ok_or_else(|| crate::bool_error!("Invalid date"))
260        }
261    }
262
263    #[doc(alias = "g_date_time_add_years")]
264    pub fn add_years(&self, years: i32) -> Result<DateTime, BoolError> {
265        unsafe {
266            Option::<_>::from_glib_full(ffi::g_date_time_add_years(self.to_glib_none().0, years))
267                .ok_or_else(|| crate::bool_error!("Invalid date"))
268        }
269    }
270
271    #[doc(alias = "g_date_time_compare")]
272    fn compare(&self, dt2: &DateTime) -> i32 {
273        unsafe {
274            ffi::g_date_time_compare(
275                ToGlibPtr::<*mut ffi::GDateTime>::to_glib_none(self).0 as ffi::gconstpointer,
276                ToGlibPtr::<*mut ffi::GDateTime>::to_glib_none(dt2).0 as ffi::gconstpointer,
277            )
278        }
279    }
280
281    #[doc(alias = "g_date_time_difference")]
282    pub fn difference(&self, begin: &DateTime) -> TimeSpan {
283        unsafe {
284            from_glib(ffi::g_date_time_difference(
285                self.to_glib_none().0,
286                begin.to_glib_none().0,
287            ))
288        }
289    }
290
291    #[doc(alias = "g_date_time_equal")]
292    fn equal(&self, dt2: &DateTime) -> bool {
293        unsafe {
294            from_glib(ffi::g_date_time_equal(
295                ToGlibPtr::<*mut ffi::GDateTime>::to_glib_none(self).0 as ffi::gconstpointer,
296                ToGlibPtr::<*mut ffi::GDateTime>::to_glib_none(dt2).0 as ffi::gconstpointer,
297            ))
298        }
299    }
300
301    #[doc(alias = "g_date_time_format")]
302    pub fn format(&self, format: &str) -> Result<crate::GString, BoolError> {
303        unsafe {
304            Option::<_>::from_glib_full(ffi::g_date_time_format(
305                self.to_glib_none().0,
306                format.to_glib_none().0,
307            ))
308            .ok_or_else(|| crate::bool_error!("Invalid date"))
309        }
310    }
311
312    #[cfg(feature = "v2_62")]
313    #[cfg_attr(docsrs, doc(cfg(feature = "v2_62")))]
314    #[doc(alias = "g_date_time_format_iso8601")]
315    pub fn format_iso8601(&self) -> Result<crate::GString, BoolError> {
316        unsafe {
317            Option::<_>::from_glib_full(ffi::g_date_time_format_iso8601(self.to_glib_none().0))
318                .ok_or_else(|| crate::bool_error!("Invalid date"))
319        }
320    }
321
322    #[doc(alias = "g_date_time_get_day_of_month")]
323    #[doc(alias = "get_day_of_month")]
324    pub fn day_of_month(&self) -> i32 {
325        unsafe { ffi::g_date_time_get_day_of_month(self.to_glib_none().0) }
326    }
327
328    #[doc(alias = "g_date_time_get_day_of_week")]
329    #[doc(alias = "get_day_of_week")]
330    pub fn day_of_week(&self) -> i32 {
331        unsafe { ffi::g_date_time_get_day_of_week(self.to_glib_none().0) }
332    }
333
334    #[doc(alias = "g_date_time_get_day_of_year")]
335    #[doc(alias = "get_day_of_year")]
336    pub fn day_of_year(&self) -> i32 {
337        unsafe { ffi::g_date_time_get_day_of_year(self.to_glib_none().0) }
338    }
339
340    #[doc(alias = "g_date_time_get_hour")]
341    #[doc(alias = "get_hour")]
342    pub fn hour(&self) -> i32 {
343        unsafe { ffi::g_date_time_get_hour(self.to_glib_none().0) }
344    }
345
346    #[doc(alias = "g_date_time_get_microsecond")]
347    #[doc(alias = "get_microsecond")]
348    pub fn microsecond(&self) -> i32 {
349        unsafe { ffi::g_date_time_get_microsecond(self.to_glib_none().0) }
350    }
351
352    #[doc(alias = "g_date_time_get_minute")]
353    #[doc(alias = "get_minute")]
354    pub fn minute(&self) -> i32 {
355        unsafe { ffi::g_date_time_get_minute(self.to_glib_none().0) }
356    }
357
358    #[doc(alias = "g_date_time_get_month")]
359    #[doc(alias = "get_month")]
360    pub fn month(&self) -> i32 {
361        unsafe { ffi::g_date_time_get_month(self.to_glib_none().0) }
362    }
363
364    #[doc(alias = "g_date_time_get_second")]
365    #[doc(alias = "get_second")]
366    pub fn second(&self) -> i32 {
367        unsafe { ffi::g_date_time_get_second(self.to_glib_none().0) }
368    }
369
370    #[doc(alias = "g_date_time_get_seconds")]
371    #[doc(alias = "get_seconds")]
372    pub fn seconds(&self) -> f64 {
373        unsafe { ffi::g_date_time_get_seconds(self.to_glib_none().0) }
374    }
375
376    #[cfg(feature = "v2_58")]
377    #[cfg_attr(docsrs, doc(cfg(feature = "v2_58")))]
378    #[doc(alias = "g_date_time_get_timezone")]
379    #[doc(alias = "get_timezone")]
380    pub fn timezone(&self) -> TimeZone {
381        unsafe { from_glib_none(ffi::g_date_time_get_timezone(self.to_glib_none().0)) }
382    }
383
384    #[doc(alias = "g_date_time_get_timezone_abbreviation")]
385    #[doc(alias = "get_timezone_abbreviation")]
386    pub fn timezone_abbreviation(&self) -> crate::GString {
387        unsafe {
388            from_glib_none(ffi::g_date_time_get_timezone_abbreviation(
389                self.to_glib_none().0,
390            ))
391        }
392    }
393
394    #[doc(alias = "g_date_time_get_utc_offset")]
395    #[doc(alias = "get_utc_offset")]
396    pub fn utc_offset(&self) -> TimeSpan {
397        unsafe { from_glib(ffi::g_date_time_get_utc_offset(self.to_glib_none().0)) }
398    }
399
400    #[doc(alias = "g_date_time_get_week_numbering_year")]
401    #[doc(alias = "get_week_numbering_year")]
402    pub fn week_numbering_year(&self) -> i32 {
403        unsafe { ffi::g_date_time_get_week_numbering_year(self.to_glib_none().0) }
404    }
405
406    #[doc(alias = "g_date_time_get_week_of_year")]
407    #[doc(alias = "get_week_of_year")]
408    pub fn week_of_year(&self) -> i32 {
409        unsafe { ffi::g_date_time_get_week_of_year(self.to_glib_none().0) }
410    }
411
412    #[doc(alias = "g_date_time_get_year")]
413    #[doc(alias = "get_year")]
414    pub fn year(&self) -> i32 {
415        unsafe { ffi::g_date_time_get_year(self.to_glib_none().0) }
416    }
417
418    #[doc(alias = "g_date_time_get_ymd")]
419    #[doc(alias = "get_ymd")]
420    pub fn ymd(&self) -> (i32, i32, i32) {
421        unsafe {
422            let mut year = std::mem::MaybeUninit::uninit();
423            let mut month = std::mem::MaybeUninit::uninit();
424            let mut day = std::mem::MaybeUninit::uninit();
425            ffi::g_date_time_get_ymd(
426                self.to_glib_none().0,
427                year.as_mut_ptr(),
428                month.as_mut_ptr(),
429                day.as_mut_ptr(),
430            );
431            (year.assume_init(), month.assume_init(), day.assume_init())
432        }
433    }
434
435    #[doc(alias = "g_date_time_hash")]
436    fn hash(&self) -> u32 {
437        unsafe {
438            ffi::g_date_time_hash(
439                ToGlibPtr::<*mut ffi::GDateTime>::to_glib_none(self).0 as ffi::gconstpointer,
440            )
441        }
442    }
443
444    #[doc(alias = "g_date_time_is_daylight_savings")]
445    pub fn is_daylight_savings(&self) -> bool {
446        unsafe { from_glib(ffi::g_date_time_is_daylight_savings(self.to_glib_none().0)) }
447    }
448
449    #[doc(alias = "g_date_time_to_local")]
450    pub fn to_local(&self) -> Result<DateTime, BoolError> {
451        unsafe {
452            Option::<_>::from_glib_full(ffi::g_date_time_to_local(self.to_glib_none().0))
453                .ok_or_else(|| crate::bool_error!("Invalid date"))
454        }
455    }
456
457    //#[cfg_attr(feature = "v2_62", deprecated = "Since 2.62")]
458    //#[allow(deprecated)]
459    //#[doc(alias = "g_date_time_to_timeval")]
460    //pub fn to_timeval(&self, tv: /*Ignored*/&mut TimeVal) -> bool {
461    //    unsafe { TODO: call ffi:g_date_time_to_timeval() }
462    //}
463
464    #[doc(alias = "g_date_time_to_timezone")]
465    pub fn to_timezone(&self, tz: &TimeZone) -> Result<DateTime, BoolError> {
466        unsafe {
467            Option::<_>::from_glib_full(ffi::g_date_time_to_timezone(
468                self.to_glib_none().0,
469                tz.to_glib_none().0,
470            ))
471            .ok_or_else(|| crate::bool_error!("Invalid date"))
472        }
473    }
474
475    #[doc(alias = "g_date_time_to_unix")]
476    pub fn to_unix(&self) -> i64 {
477        unsafe { ffi::g_date_time_to_unix(self.to_glib_none().0) }
478    }
479
480    #[cfg(feature = "v2_80")]
481    #[cfg_attr(docsrs, doc(cfg(feature = "v2_80")))]
482    #[doc(alias = "g_date_time_to_unix_usec")]
483    pub fn to_unix_usec(&self) -> i64 {
484        unsafe { ffi::g_date_time_to_unix_usec(self.to_glib_none().0) }
485    }
486
487    #[doc(alias = "g_date_time_to_utc")]
488    pub fn to_utc(&self) -> Result<DateTime, BoolError> {
489        unsafe {
490            Option::<_>::from_glib_full(ffi::g_date_time_to_utc(self.to_glib_none().0))
491                .ok_or_else(|| crate::bool_error!("Invalid date"))
492        }
493    }
494}
495
496impl PartialOrd for DateTime {
497    #[inline]
498    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
499        Some(self.cmp(other))
500    }
501}
502
503impl Ord for DateTime {
504    #[inline]
505    fn cmp(&self, other: &Self) -> std::cmp::Ordering {
506        self.compare(other).cmp(&0)
507    }
508}
509
510impl PartialEq for DateTime {
511    #[inline]
512    fn eq(&self, other: &Self) -> bool {
513        self.equal(other)
514    }
515}
516
517impl Eq for DateTime {}
518
519impl std::hash::Hash for DateTime {
520    #[inline]
521    fn hash<H>(&self, state: &mut H)
522    where
523        H: std::hash::Hasher,
524    {
525        std::hash::Hash::hash(&self.hash(), state)
526    }
527}
528
529unsafe impl Send for DateTime {}
530unsafe impl Sync for DateTime {}