Skip to main content

date_differencer/diff/
time_support.rs

1use time::{OffsetDateTime, PrimitiveDateTime, UtcDateTime};
2
3use super::DateTimeParts;
4
5impl DateTimeParts for PrimitiveDateTime {
6    #[inline]
7    fn year(&self) -> i32 {
8        let (year, ..) = self.to_calendar_date();
9
10        year
11    }
12
13    #[inline]
14    fn month(&self) -> u8 {
15        let (_, month, _) = self.to_calendar_date();
16
17        u8::from(month)
18    }
19
20    #[inline]
21    fn day(&self) -> u8 {
22        let (_, _, day) = self.to_calendar_date();
23
24        day
25    }
26
27    #[inline]
28    fn hour(&self) -> u8 {
29        let (hour, ..) = self.as_hms_nano();
30
31        hour
32    }
33
34    #[inline]
35    fn minute(&self) -> u8 {
36        let (_, minute, ..) = self.as_hms_nano();
37
38        minute
39    }
40
41    #[inline]
42    fn second(&self) -> u8 {
43        let (_, _, second, _) = self.as_hms_nano();
44
45        second
46    }
47
48    #[inline]
49    fn nanosecond(&self) -> u32 {
50        let (_, _, _, nanosecond) = self.as_hms_nano();
51
52        nanosecond
53    }
54}
55
56impl DateTimeParts for OffsetDateTime {
57    #[inline]
58    fn year(&self) -> i32 {
59        let (year, ..) = self.to_calendar_date();
60
61        year
62    }
63
64    #[inline]
65    fn month(&self) -> u8 {
66        let (_, month, _) = self.to_calendar_date();
67
68        u8::from(month)
69    }
70
71    #[inline]
72    fn day(&self) -> u8 {
73        let (_, _, day) = self.to_calendar_date();
74
75        day
76    }
77
78    #[inline]
79    fn hour(&self) -> u8 {
80        let (hour, ..) = self.to_hms_nano();
81
82        hour
83    }
84
85    #[inline]
86    fn minute(&self) -> u8 {
87        let (_, minute, ..) = self.to_hms_nano();
88
89        minute
90    }
91
92    #[inline]
93    fn second(&self) -> u8 {
94        let (_, _, second, _) = self.to_hms_nano();
95
96        second
97    }
98
99    #[inline]
100    fn nanosecond(&self) -> u32 {
101        let (_, _, _, nanosecond) = self.to_hms_nano();
102
103        nanosecond
104    }
105}
106
107impl DateTimeParts for UtcDateTime {
108    #[inline]
109    fn year(&self) -> i32 {
110        let (year, ..) = self.date().to_calendar_date();
111
112        year
113    }
114
115    #[inline]
116    fn month(&self) -> u8 {
117        let (_, month, _) = self.date().to_calendar_date();
118
119        u8::from(month)
120    }
121
122    #[inline]
123    fn day(&self) -> u8 {
124        let (_, _, day) = self.date().to_calendar_date();
125
126        day
127    }
128
129    #[inline]
130    fn hour(&self) -> u8 {
131        let (hour, ..) = self.as_hms_nano();
132
133        hour
134    }
135
136    #[inline]
137    fn minute(&self) -> u8 {
138        let (_, minute, ..) = self.as_hms_nano();
139
140        minute
141    }
142
143    #[inline]
144    fn second(&self) -> u8 {
145        let (_, _, second, _) = self.as_hms_nano();
146
147        second
148    }
149
150    #[inline]
151    fn nanosecond(&self) -> u32 {
152        let (_, _, _, nanosecond) = self.as_hms_nano();
153
154        nanosecond
155    }
156}