Skip to content

fix(electricity): normalize date parsing and clean up bad DB rows#103

Merged
sondresjolyst merged 1 commit intodevelopmentfrom
fix/electricity-price-timezone
Apr 19, 2026
Merged

fix(electricity): normalize date parsing and clean up bad DB rows#103
sondresjolyst merged 1 commit intodevelopmentfrom
fix/electricity-price-timezone

Conversation

@sondresjolyst
Copy link
Copy Markdown
Owner

Fix duplicate electricity price bars in weekly/monthly/yearly charts.

Root cause: DateTime.Parse on date-only strings from Nord Pool returned Kind=Unspecified. .ToUniversalTime() assumed server local time, so Docker (UTC) and Windows Norway (UTC+2) stored different UTC keys for the same date, bypassing the unique index and creating duplicate rows.

Changes:

  • NordPoolService: ParseDeliveryDate() uses DateTime.SpecifyKind+ParseExact for date-only strings, always UTC midnight regardless of server timezone
  • ElectricityPriceFetchService: removed redundant .ToUniversalTime() calls
  • 3 migrations to clean up existing bad data (normalize, deduplicate, delete remaining wrong-date rows)

…t duplicates

- ParseDeliveryDate() now uses DateTime.SpecifyKind+ParseExact for date-only strings
  so DAILY/MONTHLY delivery dates are always stored as UTC midnight regardless of
  server timezone (fixes duplicate rows when running on UTC+2 vs UTC Docker)
- Remove redundant .ToUniversalTime() calls in ElectricityPriceFetchService
- Migration: deduplicate and normalize existing DAILY/MONTHLY rows (DATE_TRUNC)
- Migration: re-run normalization with +12h rounding for Norway-local UTC offsets
- Migration: delete remaining bad-date MONTHLY rows (day != 1) and all DAILY rows
  so the service can repopulate them cleanly on next startup
@sondresjolyst sondresjolyst merged commit cf90a26 into development Apr 19, 2026
1 check passed
@sondresjolyst sondresjolyst deleted the fix/electricity-price-timezone branch April 19, 2026 19:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant