core_foundation/
timezone.rs1use core_foundation_sys::base::kCFAllocatorDefault;
13pub use core_foundation_sys::timezone::*;
14
15use crate::base::TCFType;
16use crate::date::{CFDate, CFTimeInterval};
17use crate::string::CFString;
18
19declare_TCFType! {
20 CFTimeZone, CFTimeZoneRef
22}
23impl_TCFType!(CFTimeZone, CFTimeZoneRef, CFTimeZoneGetTypeID);
24impl_CFTypeDescription!(CFTimeZone);
25
26impl Default for CFTimeZone {
27 fn default() -> CFTimeZone {
28 unsafe {
29 let tz_ref = CFTimeZoneCopyDefault();
30 TCFType::wrap_under_create_rule(tz_ref)
31 }
32 }
33}
34
35impl CFTimeZone {
36 #[inline]
37 pub fn new(interval: CFTimeInterval) -> CFTimeZone {
38 unsafe {
39 let tz_ref = CFTimeZoneCreateWithTimeIntervalFromGMT(kCFAllocatorDefault, interval);
40 TCFType::wrap_under_create_rule(tz_ref)
41 }
42 }
43
44 #[inline]
45 pub fn system() -> CFTimeZone {
46 unsafe {
47 let tz_ref = CFTimeZoneCopySystem();
48 TCFType::wrap_under_create_rule(tz_ref)
49 }
50 }
51
52 pub fn seconds_from_gmt(&self, date: CFDate) -> CFTimeInterval {
53 unsafe { CFTimeZoneGetSecondsFromGMT(self.0, date.abs_time()) }
54 }
55
56 pub fn name(&self) -> CFString {
59 unsafe { CFString::wrap_under_get_rule(CFTimeZoneGetName(self.0)) }
60 }
61}
62
63#[cfg(test)]
64mod test {
65 use super::CFTimeZone;
66
67 #[test]
68 fn timezone_comparison() {
69 let system = CFTimeZone::system();
70 let default = CFTimeZone::default();
71 assert_eq!(system, default);
72 }
73}