///|
/// A BSON UTC datetime with millisecond precision.
pub struct DateTime {
milliseconds : Int64
} derive(Eq, Debug)
///|
pub fn DateTime::from_millis(milliseconds : Int64) -> DateTime {
{ milliseconds, }
}
///|
pub fn DateTime::to_millis(self : DateTime) -> Int64 {
self.milliseconds
}
///|
pub fn DateTime::now() -> DateTime {
DateTime::from_millis(@env.now().reinterpret_as_int64())
}
///|
pub fn DateTime::from_rfc3339(value : String) -> DateTime raise BsonError {
DateTime::from_millis(parse_rfc3339_millis(value, "$")) catch {
_ =>
raise bson_error(
InvalidDateTime,
-1,
"$",
"invalid RFC 3339 BSON datetime",
)
}
}
///|
pub fn DateTime::to_rfc3339(self : DateTime) -> String raise BsonError {
match rfc3339_datetime_string(self.milliseconds) {
Some(value) => value
None =>
raise bson_error(
InvalidDateTime,
-1,
"$",
"BSON datetime is outside RFC 3339 four-digit year range",
)
}
}