Possibly fixed #8 #57

Merged
profitroll merged 10 commits from profitroll/timezones-fix into dev 2024-05-31 00:25:54 +03:00
3 changed files with 21 additions and 26 deletions
Showing only changes of commit 65e9e830c1 - Show all commits

View File

@ -1,8 +1,7 @@
from datetime import datetime
from typing import Union
from pytz import UTC
from pytz import timezone as pytz_timezone
import pytz
def to_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
@ -18,7 +17,9 @@ def to_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
* `datetime`: Timezone unaware datetime in UTC with timezone's offset applied to it.
"""
timezone = "UTC" if timezone is None else timezone
return pytz_timezone(timezone).localize(date).astimezone(UTC).replace(tzinfo=None)
return (
pytz.timezone(timezone).localize(date).astimezone(pytz.utc).replace(tzinfo=None)
)
def from_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
@ -35,8 +36,5 @@ def from_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
"""
timezone = "UTC" if timezone is None else timezone
return (
pytz_timezone("UTC")
.localize(date)
.astimezone(pytz_timezone(timezone))
.replace(tzinfo=None)
pytz.utc.localize(date).astimezone(pytz.timezone(timezone)).replace(tzinfo=None)
)

View File

@ -1,6 +1,7 @@
import logging
from datetime import datetime, timezone
from datetime import datetime
import pytz
from convopyro import listen_message
from pyrogram import filters
from pyrogram.types import ForceReply, Message, ReplyKeyboardRemove
@ -54,34 +55,30 @@ async def command_set_time(app: PyroClient, message: Message):
break
now = datetime.now()
# Time we got from the user
parsed_time = datetime.strptime(answer.text, "%H:%M")
parsed_time = datetime.strptime(answer.text, "%H:%M").replace(
year=now.year,
month=now.month,
day=now.day,
second=0,
microsecond=0,
tzinfo=timezone.utc,
# Datetime user means in their timezone
user_time = datetime.now(user.location.timezone).replace(
hour=parsed_time.hour, minute=parsed_time.minute, second=0, microsecond=0
)
user_time = parsed_time.astimezone(user.location.timezone or timezone.utc)
# Datetime in user's timezone moved to UTC timezone
utc_time = user_time.astimezone(pytz.utc)
await user.update_time(hour=user_time.hour, minute=user_time.minute)
await user.update_time(hour=utc_time.hour, minute=utc_time.minute)
logger.info(
"User %s has selected notification time of %s (%s UTC)",
user.id,
parsed_time.strftime("%H:%M"),
user_time.strftime("%H:%M"),
utc_time.strftime("%H:%M"),
)
garbage_time = parsed_time.strftime(app._("time", "formats", locale=user.locale))
await answer.reply_text(
app._("set_time_finished", "messages", locale=user.locale).format(
offset=user.offset,
time=garbage_time,
time=user_time.strftime(app._("time", "formats", locale=user.locale)),
toggle_notice=(
"" if user.enabled else app._("toggle", "messages", locale=user.locale)
),

View File

@ -22,13 +22,13 @@ async def command_upcoming(app: PyroClient, message: Message):
)
return
date_min = (
date_min = pytz.utc.localize(
datetime.now(user.location.timezone).replace(second=0, microsecond=0)
).replace(tzinfo=pytz.utc)
date_max = (
)
date_max = pytz.utc.localize(
datetime.now(user.location.timezone).replace(second=0, microsecond=0)
+ timedelta(days=30)
).replace(tzinfo=pytz.utc)
)
entries = [
await GarbageEntry.from_record(entry)