158 lines
4.3 KiB
Python
158 lines
4.3 KiB
Python
from datetime import date, datetime, timedelta, time
|
|
import re
|
|
from typing import Generator
|
|
|
|
|
|
# Monday - 0
|
|
# Tuesday - 1
|
|
# Wednesday - 2
|
|
# Thursday - 3
|
|
# Friday - 4
|
|
# Saturday - 5
|
|
# Sunday -6
|
|
|
|
def format_date(d):
|
|
return d.strftime('%d.%m.%Y')
|
|
|
|
|
|
def get_current_date():
|
|
return date.today()
|
|
|
|
|
|
def get_current_datetime():
|
|
return datetime.today()
|
|
|
|
|
|
def get_current_day_of_week():
|
|
return datetime.today().weekday()
|
|
|
|
|
|
def convert_timestamp_to_UTC(timestamp):
|
|
return datetime.fromtimestamp(timestamp)
|
|
|
|
|
|
def convert_UTC_to_timestamp(date):
|
|
return datetime.timestamp(date)
|
|
|
|
|
|
def get_day_of_week_number(day):
|
|
if day == 'dziś' or day == 'dzisiaj':
|
|
return get_current_day_of_week()
|
|
if day == 'poniedziałek':
|
|
return 0
|
|
elif day == 'wtorek':
|
|
return 1
|
|
elif day == 'środa':
|
|
return 2
|
|
elif day == 'czwartek':
|
|
return 3
|
|
elif day == 'piątek':
|
|
return 4
|
|
elif day == 'sobota':
|
|
return 5
|
|
elif day == 'niedziela':
|
|
return 6
|
|
|
|
|
|
def get_time_from_hours_minutes(hours, minutes):
|
|
return time(hours, minutes, 0)
|
|
|
|
|
|
def format_time(time):
|
|
if re.match(r'^[0-2][0-9]$', time):
|
|
hours = int(time)
|
|
minutes = 00
|
|
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
|
|
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
|
|
hours = int(m.group(1))
|
|
minutes = int(m.group(2))
|
|
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
|
|
|
|
|
|
def get_end_time(time):
|
|
if re.match(r'^([0-2][0-9]).?([0-9][0-9])?-([0-2][0-9]).?([0-9][0-9])?$', time):
|
|
m = re.search(
|
|
r'^^([0-2][0-9]).?([0-9][0-9])?-([0-2][0-9]).?([0-9][0-9])?$', time)
|
|
|
|
hours = int(m.group(3))
|
|
if m.group(4) is None:
|
|
minutes = 0
|
|
else:
|
|
minutes = int(m.group(4))
|
|
|
|
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
|
|
else:
|
|
# jak nie ma to zakładamy że trwa godzinę
|
|
if re.match(r'^[0-2][0-9]$', time):
|
|
hours = int(time)
|
|
minutes = 00
|
|
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
|
|
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
|
|
hours = int(m.group(1))
|
|
minutes = int(m.group(2))
|
|
|
|
hours += 1
|
|
if hours == 23:
|
|
hours = 24
|
|
elif hours == 24:
|
|
hours = 1
|
|
|
|
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
|
|
|
|
|
|
def get_datetime_from_day(day, hours, minutes):
|
|
current_day_of_week = get_current_day_of_week()
|
|
input_date_of_week = get_day_of_week_number(day)
|
|
input_time = get_time_from_hours_minutes(hours, minutes)
|
|
|
|
# data wypada na dzisiaj i trzeba sprawdzić godziny
|
|
if current_day_of_week == input_date_of_week:
|
|
|
|
# Podanej czas już był
|
|
if input_time < datetime.now().time():
|
|
date = get_current_date() + timedelta(days=7)
|
|
return datetime.combine(date, input_time)
|
|
# Podana czas jeszcze nie był
|
|
else:
|
|
date = get_current_date()
|
|
return datetime.combine(date, input_time)
|
|
|
|
# data będzie z przyszłośći
|
|
else:
|
|
date = get_current_date() + timedelta(days=(7 - abs(current_day_of_week-input_date_of_week)))
|
|
return datetime.combine(date, input_time)
|
|
|
|
|
|
def get_date(date, time):
|
|
# parsowanie czasu
|
|
if re.match(r'^[0-2][0-9]$', time):
|
|
hours = int(time)
|
|
minutes = 00
|
|
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
|
|
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
|
|
hours = int(m.group(1))
|
|
minutes = int(m.group(2))
|
|
|
|
|
|
# TODO jeżeli jeszcze jakieś dziwne formaty to obsłużyć przypadki
|
|
if re.match(r'^[0-3][0-9]\.[0-1][0-9]\.20[0-9]{2}$', date):
|
|
date = datetime.strptime(date, '%d.%m.%Y').date()
|
|
return datetime.combine(date, get_time_from_hours_minutes(hours, minutes))
|
|
else:
|
|
return get_datetime_from_day(date, hours, minutes)
|
|
|
|
|
|
# Tests
|
|
|
|
# print(get_datetime_from_day('niedziela', 22, 21))
|
|
# print(get_datetime_from_day('niedziela', 18, 21))
|
|
# print(get_datetime_from_day('poniedziałek', 18, 21))
|
|
# print(get_datetime_from_day('wtorek', 18, 21))
|
|
|
|
# print(get_date("07.06.2021", "12:00"))
|
|
# print(get_date("sobota", "00:00"))
|
|
# print(get_date("wtorek", "12:00"))
|
|
# print(get_date("12.06.2021", "23"))
|
|
|
|
# print(get_current_date())
|