Skip to content

Commit

Permalink
Fix \clock\ example doesn't get the correct local time under unix s…
Browse files Browse the repository at this point in the history
…ystem

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 e9160e6
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 e9160e6

Please sign in to comment.