Skip to content

Commit 9e56867

Browse files
Merge pull request #350 from ram-from-tvl/timezone-refactoring
timezone refactoring migrated from pytz to zoneinfo
2 parents 4c27b64 + fcd51a6 commit 9e56867

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

src/pvsite_forecast.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import numpy as np
44
import streamlit as st
55
from datetime import datetime, timedelta, time, timezone
6+
from zoneinfo import ZoneInfo
67
from pvsite_datamodel.read import get_site_by_uuid
78
from pvsite_datamodel.read.model import get_models
89
from sqlalchemy.orm import Session
@@ -15,7 +16,6 @@
1516
)
1617

1718
import plotly.graph_objects as go
18-
import pytz
1919

2020
# Penalty Calculator
2121
def calculate_penalty(df, region, asset_type, capacity_kw):
@@ -129,7 +129,8 @@ def pvsite_forecast_page():
129129
timezone_selected = st.sidebar.selectbox(
130130
"Select timezone", ["UTC", "Asia/Calcutta"]
131131
)
132-
timezone_selected = pytz.timezone(timezone_selected)
132+
133+
timezone_selected = ZoneInfo(timezone_selected)
133134

134135
day_after_tomorrow = datetime.today() + timedelta(days=3)
135136
starttime = st.sidebar.date_input(
@@ -221,18 +222,16 @@ def pvsite_forecast_page():
221222
endtime = datetime.combine(endtime, time.min)
222223

223224
# change to the correct timezone
224-
# starttime = starttime.replace(tzinfo=timezone_selected)
225-
# endtime = endtime.replace(tzinfo=timezone_selected)
226-
starttime = timezone_selected.localize(starttime)
227-
endtime = timezone_selected.localize(endtime)
225+
starttime = starttime.replace(tzinfo=timezone_selected)
226+
endtime = endtime.replace(tzinfo=timezone_selected)
228227

229228
# change to utc
230-
starttime = starttime.astimezone(pytz.utc)
231-
endtime = endtime.astimezone(pytz.utc)
229+
starttime = starttime.astimezone(timezone.utc)
230+
endtime = endtime.astimezone(timezone.utc)
232231

233232
if created is not None:
234-
created = timezone_selected.localize(created)
235-
created = created.astimezone(pytz.utc)
233+
created = created.replace(tzinfo=timezone_selected)
234+
created = created.astimezone(timezone.utc)
236235

237236
# great ml model names for this site
238237

@@ -286,7 +285,7 @@ class Models:
286285
y = [i.forecast_power_kw for i in forecast_values]
287286

288287
# convert to timezone
289-
x = [i.replace(tzinfo=pytz.utc) for i in x]
288+
x = [i.replace(tzinfo=timezone.utc) for i in x]
290289
x = [i.astimezone(timezone_selected) for i in x]
291290

292291
ys[model.name] = y
@@ -310,7 +309,7 @@ class Models:
310309
]
311310

312311
# convert to timezone
313-
xx = [i.replace(tzinfo=pytz.utc) for i in xx]
312+
xx = [i.replace(tzinfo=timezone.utc) for i in xx]
314313
xx = [i.astimezone(timezone_selected) for i in xx]
315314

316315
df_forecast = []

src/utils.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import streamlit as st
22
import json
33
import requests
4-
from datetime import datetime
5-
import pytz
4+
from datetime import datetime, timezone
5+
from zoneinfo import ZoneInfo
66

77

88
def load_css(css_file):
@@ -24,13 +24,13 @@ def parse_timestamp(status):
2424
raise ValueError(f"Invalid timestamp format: {e}")
2525

2626
if parsed_time.tzinfo is not None:
27-
utc_time = parsed_time.astimezone(pytz.utc)
27+
utc_time = parsed_time.astimezone(timezone.utc)
2828
else:
2929
# If no timezone is specified, assume it's UTC
30-
utc_time = parsed_time.replace(tzinfo=pytz.utc)
30+
utc_time = parsed_time.replace(tzinfo=timezone.utc)
3131

3232
# Convert to specific timezone (Asia/Kolkata)
33-
local_timezone = pytz.timezone("Asia/Kolkata")
33+
local_timezone = ZoneInfo("Asia/Kolkata")
3434
local_time = parsed_time.astimezone(local_timezone)
3535

3636
return local_time

0 commit comments

Comments
 (0)