Skip to content

Commit

Permalink
Fix the problem of not getting the correct local time under unix system
Browse files Browse the repository at this point in the history
There is a long-standing problem (time-rs/time#293) that has not yet been solved by time-rs
Switch to chrono as it seemed to solve the problem (chronotope/chrono#677)
  • Loading branch information
skygrango committed May 3, 2024
1 parent fe240a9 commit 7f92744
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 16 deletions.
3 changes: 1 addition & 2 deletions examples/clock/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ publish = false
[dependencies]
iced.workspace = true
iced.features = ["canvas", "tokio", "debug"]

time = { version = "0.3", features = ["local-offset"] }
chrono = { version = "0.4", features = [ "clock" ] }
tracing-subscriber = "0.3"
26 changes: 12 additions & 14 deletions examples/clock/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ use iced::{
Theme, Vector,
};

use chrono as time;
use time::Timelike;

pub fn main() -> iced::Result {
tracing_subscriber::fmt::init();

Expand All @@ -18,13 +21,13 @@ pub fn main() -> iced::Result {
}

struct Clock {
now: time::OffsetDateTime,
now: time::DateTime<time::Local>,
clock: Cache,
}

#[derive(Debug, Clone, Copy)]
enum Message {
Tick(time::OffsetDateTime),
Tick(time::DateTime<time::Local>),
}

impl Clock {
Expand Down Expand Up @@ -54,25 +57,20 @@ impl Clock {
}

fn subscription(&self) -> Subscription<Message> {
iced::time::every(std::time::Duration::from_millis(500)).map(|_| {
Message::Tick(
time::OffsetDateTime::now_local()
.unwrap_or_else(|_| time::OffsetDateTime::now_utc()),
)
})
iced::time::every(std::time::Duration::from_millis(500))
.map(|_| Message::Tick(time::offset::Local::now()))
}

fn theme(&self) -> Theme {
Theme::ALL[(self.now.unix_timestamp() as usize / 10) % Theme::ALL.len()]
Theme::ALL[(self.now.timestamp() as usize / 10) % Theme::ALL.len()]
.clone()
}
}

impl Default for Clock {
fn default() -> Self {
Self {
now: time::OffsetDateTime::now_local()
.unwrap_or_else(|_| time::OffsetDateTime::now_utc()),
now: time::offset::Local::now(),
clock: Cache::default(),
}
}
Expand Down Expand Up @@ -127,17 +125,17 @@ impl<Message> canvas::Program<Message> for Clock {
frame.translate(Vector::new(center.x, center.y));

frame.with_save(|frame| {
frame.rotate(hand_rotation(self.now.hour(), 12));
frame.rotate(hand_rotation(self.now.hour() as u8, 12));
frame.stroke(&short_hand, wide_stroke());
});

frame.with_save(|frame| {
frame.rotate(hand_rotation(self.now.minute(), 60));
frame.rotate(hand_rotation(self.now.minute() as u8, 60));
frame.stroke(&long_hand, wide_stroke());
});

frame.with_save(|frame| {
let rotation = hand_rotation(self.now.second(), 60);
let rotation = hand_rotation(self.now.second() as u8, 60);

frame.rotate(rotation);
frame.stroke(&long_hand, thin_stroke());
Expand Down

0 comments on commit 7f92744

Please sign in to comment.