diff --git a/src/gui/views/network/metrics.rs b/src/gui/views/network/metrics.rs index fc40d46..ae9d864 100644 --- a/src/gui/views/network/metrics.rs +++ b/src/gui/views/network/metrics.rs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -use chrono::{DateTime, NaiveDateTime, Utc}; use egui::{RichText, Rounding, ScrollArea, vec2}; use grin_servers::DiffBlock; @@ -176,14 +175,12 @@ fn block_item_ui(ui: &mut egui::Ui, db: &DiffBlock, rounding: Rounding) { // Draw block date. ui.horizontal(|ui| { ui.add_space(6.0); - let block_time = NaiveDateTime::from_timestamp_opt(db.time as i64, 0).unwrap(); - let block_date: DateTime = DateTime::from_utc(block_time, Utc); - let block_time_text = block_date.format("%d/%m/%Y %H:%M:%S UTC").to_string(); + let block_time = View::format_time(db.time as i64); ui.label(RichText::new(format!("{} {}s {} {}", TIMER, db.duration, HOURGLASS_LOW, - block_time_text)) + block_time)) .color(Colors::GRAY) .size(16.0)); }); diff --git a/src/gui/views/network/mining.rs b/src/gui/views/network/mining.rs index 464129e..eaa0f4f 100644 --- a/src/gui/views/network/mining.rs +++ b/src/gui/views/network/mining.rs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -use chrono::{DateTime, NaiveDateTime, Utc}; use egui::{RichText, Rounding, ScrollArea}; use grin_chain::SyncStatus; use grin_servers::WorkerStats; @@ -264,13 +263,10 @@ fn worker_item_ui(ui: &mut egui::Ui, ws: &WorkerStats, rounding: Rounding) { ui.add_space(6.0); // Draw block time - let seen = ws.last_seen.duration_since(std::time::UNIX_EPOCH).unwrap().as_secs(); - let naive_datetime = NaiveDateTime::from_timestamp_opt(seen as i64, 0).unwrap(); - let datetime: DateTime = DateTime::from_utc(naive_datetime, Utc); - let date_text = format!("{} {}", - CLOCK_AFTERNOON, - datetime.format("%d/%m/%Y %H:%M:%S UTC")); - ui.heading(RichText::new(date_text) + let seen_ts = ws.last_seen.duration_since(std::time::UNIX_EPOCH).unwrap().as_secs(); + let seen_time = View::format_time(seen_ts as i64); + let seen_text = format!("{} {}", CLOCK_AFTERNOON, seen_time); + ui.heading(RichText::new(seen_text) .color(Colors::GRAY) .size(16.0)); }); diff --git a/src/gui/views/network/node.rs b/src/gui/views/network/node.rs index 8f7a02e..edd0d0c 100644 --- a/src/gui/views/network/node.rs +++ b/src/gui/views/network/node.rs @@ -77,10 +77,11 @@ impl NetworkTab for NetworkNode { [false, false, true, false]); }); columns[1].vertical_centered(|ui| { - let h_ts = stats.header_stats.latest_timestamp; + let h_ts = stats.header_stats.latest_timestamp.timestamp(); + let h_time = View::format_time(h_ts); View::rounded_box(ui, - h_ts.format("%d/%m/%Y %H:%M").to_string(), - t!("network_node.time_utc"), + h_time, + t!("network_node.time"), [false, false, false, true]); }); }); @@ -110,10 +111,11 @@ impl NetworkTab for NetworkNode { [false, false, true, false]); }); columns[1].vertical_centered(|ui| { - let b_ts = stats.chain_stats.latest_timestamp; + let b_ts = stats.chain_stats.latest_timestamp.timestamp(); + let b_time = View::format_time(b_ts); View::rounded_box(ui, - format!("{}", b_ts.format("%d/%m/%Y %H:%M")), - t!("network_node.time_utc"), + b_time, + t!("network_node.time"), [false, false, false, true]); }); }); diff --git a/src/gui/views/views.rs b/src/gui/views/views.rs index ec7a31b..ad726a8 100644 --- a/src/gui/views/views.rs +++ b/src/gui/views/views.rs @@ -417,7 +417,7 @@ impl View { } } - /// Draw horizontal line + /// Draw horizontal line. pub fn horizontal_line(ui: &mut egui::Ui, color: Color32) { let line_size = egui::Vec2::new(ui.available_width(), 1.0); let (line_rect, _) = ui.allocate_exact_size(line_size, Sense::hover()); @@ -427,6 +427,14 @@ impl View { Stroke { width: 1.0, color }); } + /// Format timestamp in seconds with local UTC offset. + pub fn format_time(ts: i64) -> String { + let utc_offset = chrono::Local::now().offset().local_minus_utc(); + let utc_time = ts + utc_offset as i64; + let tx_time = chrono::NaiveDateTime::from_timestamp_opt(utc_time, 0).unwrap(); + tx_time.format("%d/%m/%Y %H:%M:%S").to_string() + } + /// Get top display inset (cutout) size. pub fn get_top_inset() -> f32 { TOP_DISPLAY_INSET.load(Ordering::Relaxed) as f32