4.8 KiB
4.8 KiB
Timezone Fix - Complete Implementation
Summary
All datetime values are now stored and processed in UTC. Display timezone is configurable and only used for UI display.
Changes Made
1. utils/timezone_utils.py - Core Timezone Utilities
Changed:
- All internal processing now uses UTC (not Sofia timezone)
now_system()→now_utc()(returns UTC)normalize_timestamp()→ Returns UTC (not Sofia)normalize_dataframe_timestamps()→ Returns UTCnormalize_dataframe_index()→ Returns UTC- Added
now_display()for UI display timezone - Added
to_display_timezone()for converting UTC to display timezone - Deprecated
to_sofia(),now_sofia(),to_system_timezone()
Key Functions:
now_utc()- Use for all internal processingto_utc()- Convert to UTCnow_display()- Get current time in display timezone (UI only)to_display_timezone()- Convert UTC to display timezone (UI only)format_timestamp_for_display()- Format UTC timestamp for display
2. core/config.py - Configuration
Added:
display_timezonein default config (default: 'Europe/Sofia')
3. config.yaml - Config File
Changed:
system.timezone→system.display_timezone- All internal processing uses UTC regardless of this setting
4. ANNOTATE/core/inference_training_system.py
Fixed:
- All
datetime.now(timezone.utc)calls already correct - Added comments clarifying UTC usage
5. ANNOTATE/core/real_training_adapter.py
Fixed:
- All
datetime.now()→datetime.now(timezone.utc) - Lines: 2498, 3057, 4258, 4456
6. ANNOTATE/web/app.py
Fixed:
datetime.now()→datetime.now(timezone.utc)- Lines: 3057, 3438
7. ANNOTATE/web/static/js/chart_manager.js
Already Correct:
- Uses
toISOString()for UTC consistency normalizeTimestamp()helper ensures UTC
Configuration
Display Timezone
Set in config.yaml:
system:
display_timezone: "Europe/Sofia" # Change this to your preferred display timezone
Or in code:
from utils.timezone_utils import get_display_timezone
display_tz = get_display_timezone() # Returns configured display timezone
Usage Guidelines
For Internal Processing (Backend)
ALWAYS use UTC:
from datetime import datetime, timezone
from utils.timezone_utils import now_utc, to_utc
# Get current time
current_time = datetime.now(timezone.utc) # or now_utc()
# Convert to UTC
utc_time = to_utc(some_datetime)
# Store in database
timestamp = datetime.now(timezone.utc).isoformat()
For UI Display (Frontend/Backend)
Convert UTC to display timezone only for display:
from utils.timezone_utils import to_display_timezone, format_timestamp_for_display
# Convert UTC to display timezone
display_time = to_display_timezone(utc_datetime)
# Format for display
formatted = format_timestamp_for_display(utc_datetime, '%Y-%m-%d %H:%M:%S')
JavaScript (Frontend)
Already handles UTC correctly:
// All timestamps should be in UTC ISO format
const timestamp = new Date(utcIsoString).toISOString();
// For display, convert to local timezone (browser handles this)
const displayTime = new Date(utcIsoString).toLocaleString();
Migration Notes
Old Code (DEPRECATED)
from utils.timezone_utils import now_system, to_sofia, normalize_timestamp
# OLD - Don't use
time = now_system() # Returns Sofia timezone
time = to_sofia(dt) # Converts to Sofia
time = normalize_timestamp(ts) # Returns Sofia timezone
New Code (CORRECT)
from datetime import datetime, timezone
from utils.timezone_utils import now_utc, to_utc, to_display_timezone
# NEW - Use this
time = datetime.now(timezone.utc) # or now_utc()
time = to_utc(dt) # Converts to UTC
display_time = to_display_timezone(utc_time) # For UI only
Benefits
- No More Timezone Misalignment: All predictions align with candles
- Consistent Storage: All database timestamps in UTC
- Configurable Display: Users can set their preferred display timezone
- Clean Implementation: No more timezone patches
- International Support: Easy to support multiple timezones
Testing
-
Verify Predictions Align with Candles
- Start inference
- Check that predictions appear at correct candle times
- No 1-2 hour offset
-
Verify Display Timezone
- Change
display_timezonein config - Restart application
- Verify UI shows times in configured timezone
- Change
-
Verify UTC Storage
- Check database timestamps are in UTC
- Check all API responses use UTC
- Check logs use UTC
Removed Code
All old timezone patches have been removed:
- No more
to_sofia()conversions in processing - No more
normalize_timestamp()converting to Sofia - No more
SYSTEM_TIMEZONEusage in processing - Clean, unified UTC implementation