From 0e58cf514e3476e431d1b0bf25737cdc7cef3e25 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 8 Sep 2026 00:45:07 +0900 Subject: [PATCH] fix: date traversal logic --- dzgui/views/dialogs/calc.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/dzgui/views/dialogs/calc.py b/dzgui/views/dialogs/calc.py index 8a36397..e399c16 100644 --- a/dzgui/views/dialogs/calc.py +++ b/dzgui/views/dialogs/calc.py @@ -117,6 +117,9 @@ class ServerClock: def get_values(self) -> tuple[int, int]: return self.cur_time.hour, self.cur_time.minute + def get_datetime(self) -> datetime: + return self.cur_time + def get_time(self) -> time: return self.cur_time.time() @@ -126,18 +129,22 @@ class ServerClock: if current_time > end_time: end_time += timedelta(days=1) + while current_time < end_time: factor = self.get_accel_factor(current_time) + day_start = datetime.combine(current_time.date(), DAY_START_TIME) + day_end = datetime.combine(current_time.date(), DAY_END_TIME) - edge = ( - DAY_END_TIME if current_time.time() < DAY_END_TIME else DAY_START_TIME - ) + if current_time.time() < DAY_START_TIME: + edge = day_start + elif current_time.time() < DAY_END_TIME: + edge = day_end + else: + edge = datetime.combine( + current_time.date() + timedelta(days=1), DAY_START_TIME + ) - next_edge = datetime.combine(current_time.date(), edge) - - if next_edge <= current_time: - next_edge += timedelta(days=1) - chunk_end = min(end_time, next_edge) + chunk_end = min(end_time, edge) total += (chunk_end - current_time).total_seconds() / factor current_time = chunk_end return timedelta(seconds=total) @@ -268,8 +275,8 @@ class TimePicker(Gtk.Box): time( hour=self.get_hour(), minute=self.get_minute(), - second=d.second, - microsecond=d.microsecond, + second=0, + microsecond=0, ), )