mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-10-02 07:21:08 +00:00
FixedOffset for SQLite + Local test.
This commit is contained in:
parent
30faf73208
commit
c827c72808
@ -61,9 +61,12 @@ impl<Tz: TimeZone> Type<Sqlite> for DateTime<Tz> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<Tz: TimeZone> Encode<'_, Sqlite> for DateTime<Tz> {
|
||||
impl<Tz: TimeZone> Encode<'_, Sqlite> for DateTime<Tz>
|
||||
where
|
||||
<Tz as TimeZone>::Offset: std::fmt::Display,
|
||||
{
|
||||
fn encode_by_ref(&self, buf: &mut Vec<SqliteArgumentValue<'_>>) -> IsNull {
|
||||
let text = self.with_timezone(&Utc).to_rfc3339();
|
||||
let text = self.to_rfc3339();
|
||||
Encode::<Sqlite>::encode(text, buf)
|
||||
}
|
||||
}
|
||||
@ -80,6 +83,13 @@ impl<'a> Decode<'a, Sqlite> for DateTime<Utc> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Decode<'a, Sqlite> for DateTime<FixedOffset> {
|
||||
fn decode(value: SqliteValueRef<'a>) -> Result<Self, BoxDynError> {
|
||||
let text = value.text()?;
|
||||
Ok(DateTime::parse_from_rfc3339(text)?)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Decode<'a, Sqlite> for DateTime<Local> {
|
||||
fn decode(value: SqliteValueRef<'a>) -> Result<Self, BoxDynError> {
|
||||
let as_utc: DateTime<Utc> = Decode::<Sqlite>::decode(value)?;
|
||||
|
@ -24,7 +24,9 @@ pub use uuid::Uuid;
|
||||
#[cfg(feature = "chrono")]
|
||||
#[cfg_attr(docsrs, doc(cfg(feature = "chrono")))]
|
||||
pub mod chrono {
|
||||
pub use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc};
|
||||
pub use chrono::{
|
||||
DateTime, FixedOffset, Local, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Utc,
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(feature = "time")]
|
||||
|
@ -35,17 +35,23 @@ test_type!(bytes<Vec<u8>>(Sqlite,
|
||||
#[cfg(feature = "chrono")]
|
||||
mod chrono {
|
||||
use super::*;
|
||||
use sqlx::types::chrono::{DateTime, NaiveDate, NaiveDateTime, Utc};
|
||||
use sqlx::types::chrono::{
|
||||
DateTime, FixedOffset, Local, NaiveDate, NaiveDateTime, TimeZone, Utc,
|
||||
};
|
||||
|
||||
test_type!(chrono_date_time<NaiveDateTime>(Sqlite,
|
||||
test_type!(chrono_naive_date_time<NaiveDateTime>(Sqlite,
|
||||
"'2019-01-02 05:10:20'" == NaiveDate::from_ymd(2019, 1, 2).and_hms(5, 10, 20)
|
||||
));
|
||||
|
||||
test_type!(chrono_date_time_tz<DateTime::<Utc>>(Sqlite,
|
||||
"'1996-12-20T00:39:57+00:00'"
|
||||
== DateTime::<Utc>::from_utc(
|
||||
NaiveDate::from_ymd(1996, 12, 20).and_hms(0, 39, 57),
|
||||
Utc,
|
||||
)
|
||||
test_type!(chrono_date_time_utc<DateTime::<Utc>>(Sqlite,
|
||||
"'1996-12-20T00:39:57+00:00'" == Utc.ymd(1996, 12, 20).and_hms(0, 39, 57)
|
||||
));
|
||||
|
||||
test_type!(chrono_date_time_fixed_offset<DateTime::<FixedOffset>>(Sqlite,
|
||||
"'2016-11-08T03:50:23-05:00'" == FixedOffset::west(5 * 3600).ymd(2016, 11, 08).and_hms(3, 50, 23)
|
||||
));
|
||||
|
||||
test_type!(chrono_date_time_local<DateTime::<Local>>(Sqlite,
|
||||
"'2016-11-08T03:50:23+00:00'" == Local.ymd(2016, 11, 08).and_hms(3, 50, 23)
|
||||
));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user