mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-10-04 00:05:27 +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 {
|
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)
|
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> {
|
impl<'a> Decode<'a, Sqlite> for DateTime<Local> {
|
||||||
fn decode(value: SqliteValueRef<'a>) -> Result<Self, BoxDynError> {
|
fn decode(value: SqliteValueRef<'a>) -> Result<Self, BoxDynError> {
|
||||||
let as_utc: DateTime<Utc> = Decode::<Sqlite>::decode(value)?;
|
let as_utc: DateTime<Utc> = Decode::<Sqlite>::decode(value)?;
|
||||||
|
@ -24,7 +24,9 @@ pub use uuid::Uuid;
|
|||||||
#[cfg(feature = "chrono")]
|
#[cfg(feature = "chrono")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "chrono")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "chrono")))]
|
||||||
pub mod 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")]
|
#[cfg(feature = "time")]
|
||||||
|
@ -35,17 +35,23 @@ test_type!(bytes<Vec<u8>>(Sqlite,
|
|||||||
#[cfg(feature = "chrono")]
|
#[cfg(feature = "chrono")]
|
||||||
mod chrono {
|
mod chrono {
|
||||||
use super::*;
|
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)
|
"'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,
|
test_type!(chrono_date_time_utc<DateTime::<Utc>>(Sqlite,
|
||||||
"'1996-12-20T00:39:57+00:00'"
|
"'1996-12-20T00:39:57+00:00'" == Utc.ymd(1996, 12, 20).and_hms(0, 39, 57)
|
||||||
== DateTime::<Utc>::from_utc(
|
));
|
||||||
NaiveDate::from_ymd(1996, 12, 20).and_hms(0, 39, 57),
|
|
||||||
Utc,
|
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