aboutsummaryrefslogtreecommitdiff
path: root/src/primitive/datetime.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/primitive/datetime.rs40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/primitive/datetime.rs b/src/primitive/datetime.rs
index 8d78b32..395830d 100644
--- a/src/primitive/datetime.rs
+++ b/src/primitive/datetime.rs
@@ -46,7 +46,7 @@ impl Serialize for OffsetDateTime {
fn serialize(&self) -> Result<Vec<u8>, failure::Error> {
let mut values: Vec<u8> = Vec::new();
- values.extend(i32::serialize(&(self.date().julian_day() as i32))?);
+ values.extend(i32::serialize(&(self.date().to_julian_day() as i32))?);
let time: i32 = {
let hour: i32 = self.time().hour() as i32;
@@ -59,7 +59,7 @@ impl Serialize for OffsetDateTime {
values.extend(i32::serialize(&time)?);
values.extend(u8::serialize(&(TimeSpec::OffsetFromUTC as u8))?);
- values.extend(i32::serialize(&self.offset().as_seconds())?);
+ values.extend(i32::serialize(&self.offset().whole_seconds())?);
Ok(values)
}
@@ -77,13 +77,13 @@ impl Deserialize for OffsetDateTime {
// Default to unix epoch when one of these is set to -1
if julian_day == -1 || millis_of_day == -1 {
- return Ok((pos, OffsetDateTime::unix_epoch()));
+ return Ok((pos, OffsetDateTime::UNIX_EPOCH));
}
let offset: UtcOffset;
match zone {
TimeSpec::LocalUnknown | TimeSpec::LocalStandard | TimeSpec::LocalDST => {
- offset = UtcOffset::try_current_local_offset().unwrap_or_else(|_| {
+ offset = UtcOffset::current_local_offset().unwrap_or_else(|_| {
log::warn!("could not get local offset defaulting to utc");
UtcOffset::UTC
})
@@ -92,19 +92,18 @@ impl Deserialize for OffsetDateTime {
TimeSpec::OffsetFromUTC => {
let (_, tmp_offset) = i32::parse(&b[9..13])?;
pos += 4;
- offset = UtcOffset::seconds(tmp_offset)
+ offset = UtcOffset::from_whole_seconds(tmp_offset).unwrap_or(UtcOffset::UTC)
}
}
- let date = Date::from_julian_day(julian_day as i64);
+ let date = Date::from_julian_day(julian_day)?;
let hour = millis_of_day / 60 / 60000;
let minute = (millis_of_day - (hour * 60 * 60000)) / 60000;
let seconds = (millis_of_day - (hour * 60 * 60000) - (minute * 60000)) / 1000;
let millis = millis_of_day - (hour * 60 * 60000) - (minute * 60000) - (seconds * 1000);
- let time =
- Time::try_from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?;
+ let time = Time::from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?;
let primitivedatetime = PrimitiveDateTime::new(date, time);
let datetime = primitivedatetime.assume_offset(offset);
@@ -116,7 +115,7 @@ impl Serialize for Date {
fn serialize(&self) -> Result<Vec<std::primitive::u8>, failure::Error> {
let mut values: Vec<u8> = Vec::new();
- values.extend(i32::serialize(&(self.julian_day() as i32))?);
+ values.extend(i32::serialize(&(self.to_julian_day() as i32))?);
Ok(values)
}
@@ -125,7 +124,7 @@ impl Serialize for Date {
impl Deserialize for Date {
fn parse(b: &[std::primitive::u8]) -> Result<(std::primitive::usize, Self), failure::Error> {
let (_, julian_day) = i32::parse(&b[0..4])?;
- let date = Date::from_julian_day(julian_day as i64);
+ let date = Date::from_julian_day(julian_day)?;
Ok((4, date))
}
@@ -159,8 +158,7 @@ impl Deserialize for Time {
let seconds = (millis_of_day - (hour * 60 * 60000) - (minute * 60000)) / 1000;
let millis = millis_of_day - (hour * 60 * 60000) - (minute * 60000) - (seconds * 1000);
- let time =
- Time::try_from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?;
+ let time = Time::from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?;
Ok((4, time))
}
@@ -168,7 +166,13 @@ impl Deserialize for Time {
#[test]
pub fn datetime_serialize() {
- let datetime = DateTime::parse("2020-02-19 13:00 +0200", "%Y-%m-%d %R %z").unwrap();
+ let datetime = DateTime::parse(
+ "2020-02-19 13:00 +0200",
+ time::macros::format_description!(
+ "[year]-[month]-[day] [hour]:[minute] [offset_hour sign:mandatory][offset_minute]"
+ ),
+ )
+ .unwrap();
let sers = datetime.serialize().unwrap();
let bytes = vec![0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32];
@@ -178,7 +182,13 @@ pub fn datetime_serialize() {
#[test]
pub fn datetime_deserialize() {
- let datetime = DateTime::parse("2020-02-19 13:00 +0200", "%Y-%m-%d %R %z").unwrap();
+ let datetime = DateTime::parse(
+ "2020-02-19 13:00 +0200",
+ time::macros::format_description!(
+ "[year]-[month]-[day] [hour]:[minute] [offset_hour sign:mandatory][offset_minute]"
+ ),
+ )
+ .unwrap();
let bytes = vec![0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32];
let (_, res): (usize, DateTime) = Deserialize::parse(&bytes).unwrap();
@@ -188,7 +198,7 @@ pub fn datetime_deserialize() {
#[test]
pub fn datetime_deserialize_epoch() {
- let datetime = DateTime::unix_epoch();
+ let datetime = DateTime::UNIX_EPOCH;
let bytes = vec![0, 37, 133, 19, 0xff, 0xff, 0xff, 0xff, 3, 0, 0, 28, 32];
let (_, res): (usize, DateTime) = Deserialize::parse(&bytes).unwrap();