diff --git a/src/GreenHome.Infrastructure/Services/PowerOutage/PowerOutageLogService.cs b/src/GreenHome.Infrastructure/Services/PowerOutage/PowerOutageLogService.cs index b19e0d0..cbd5024 100644 --- a/src/GreenHome.Infrastructure/Services/PowerOutage/PowerOutageLogService.cs +++ b/src/GreenHome.Infrastructure/Services/PowerOutage/PowerOutageLogService.cs @@ -16,7 +16,10 @@ public sealed class PowerOutageLogService : IPowerOutageLogService public async Task LogPowerChangeAsync(int deviceId, byte previousPower, byte currentPower, DateTime timestampUtc, CancellationToken cancellationToken) { - var (year, month, day, persianDate) = timestampUtc.ToPersianDate(); + // derive the Persian date from the naive-UTC wall-clock, not the machine-local time, + // so it does not shift with the server timezone (same rule as TelemetryService). + var (year, month, day, persianDate) = + DateTime.SpecifyKind(timestampUtc, DateTimeKind.Unspecified).ToPersianDate(); var log = new Domain.PowerOutageLog { @@ -133,7 +136,8 @@ public sealed class PowerOutageLogService : IPowerOutageLogService if (previousLog != null && previousLog.CurrentPower != record.Power) { // Power status changed - insert a log - var (year, month, day, persianDate) = record.TimestampUtc.ToPersianDate(); + var (year, month, day, persianDate) = + DateTime.SpecifyKind(record.TimestampUtc, DateTimeKind.Unspecified).ToPersianDate(); var log = new Domain.PowerOutageLog {