Skip to content

Commit

Permalink
Fix clock example doesn't get 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 f912447
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
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
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 f912447

Please sign in to comment.