mirror of
https://github.com/chronotope/chrono.git
synced 2025-10-03 07:46:24 +00:00
Use checked_(add|sub)_offset
in Add
and Sub
impls of DateTime
This commit is contained in:
parent
b1473c4e39
commit
d450b68b83
@ -1247,22 +1247,13 @@ impl<Tz: TimeZone> AddAssign<Duration> for DateTime<Tz> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_with_leapsecond<T>(lhs: &T, rhs: i32) -> T
|
|
||||||
where
|
|
||||||
T: Timelike + Add<OldDuration, Output = T>,
|
|
||||||
{
|
|
||||||
// extract and temporarily remove the fractional part and later recover it
|
|
||||||
let nanos = lhs.nanosecond();
|
|
||||||
let lhs = lhs.with_nanosecond(0).unwrap();
|
|
||||||
(lhs + OldDuration::seconds(i64::from(rhs))).with_nanosecond(nanos).unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<Tz: TimeZone> Add<FixedOffset> for DateTime<Tz> {
|
impl<Tz: TimeZone> Add<FixedOffset> for DateTime<Tz> {
|
||||||
type Output = DateTime<Tz>;
|
type Output = DateTime<Tz>;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn add(self, rhs: FixedOffset) -> DateTime<Tz> {
|
fn add(mut self, rhs: FixedOffset) -> DateTime<Tz> {
|
||||||
add_with_leapsecond(&self, rhs.local_minus_utc())
|
self.datetime = self.naive_utc().checked_add_offset(rhs).unwrap();
|
||||||
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1317,8 +1308,9 @@ impl<Tz: TimeZone> Sub<FixedOffset> for DateTime<Tz> {
|
|||||||
type Output = DateTime<Tz>;
|
type Output = DateTime<Tz>;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn sub(self, rhs: FixedOffset) -> DateTime<Tz> {
|
fn sub(mut self, rhs: FixedOffset) -> DateTime<Tz> {
|
||||||
add_with_leapsecond(&self, -rhs.local_minus_utc())
|
self.datetime = self.naive_utc().checked_sub_offset(rhs).unwrap();
|
||||||
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user