rsiot/message/
timestamp.rs1use chrono::{DateTime, Datelike, FixedOffset, Local, Timelike, Weekday};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
8pub struct Timestamp(pub DateTime<FixedOffset>);
9
10impl Timestamp {
11 pub fn format(&self, fmt: &str) -> String {
13 self.0.format(fmt).to_string()
14 }
15
16 pub fn to_rfc3339(&self) -> String {
18 self.0.to_rfc3339()
19 }
20
21 pub fn timestamp_nanos_opt(&self) -> Option<i64> {
23 self.0.timestamp_nanos_opt()
24 }
25
26 pub fn weekday(&self) -> u8 {
28 match self.0.weekday() {
29 Weekday::Mon => 1,
30 Weekday::Tue => 2,
31 Weekday::Wed => 3,
32 Weekday::Thu => 4,
33 Weekday::Fri => 5,
34 Weekday::Sat => 6,
35 Weekday::Sun => 7,
36 }
37 }
38
39 pub fn hour(&self) -> u32 {
41 self.0.hour()
42 }
43
44 pub fn minute(&self) -> u32 {
46 self.0.minute()
47 }
48
49 pub fn second(&self) -> u32 {
51 self.0.second()
52 }
53}
54
55impl Default for Timestamp {
57 fn default() -> Self {
58 Self(Local::now().into())
59 }
60}
61
62impl PartialOrd for Timestamp {
63 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
64 self.0.partial_cmp(&other.0)
65 }
66}