monitor-planning/app/workingHours.py

71 lines
2.4 KiB
Python

from datetime import time, datetime, timedelta
def is_working_hours(date = None):
if not date:
date = datetime.now()
if date.weekday() >= 5:
return False
start = time(8, 0, 0)
end = time(18, 0, 0)
current_time = date.time()
return start <= current_time <= end
def potential_midday_upload(date = None):
if not date:
date = datetime.now()
if date.weekday() >= 5:
return False
midday_upload_time = time(14, 0, 0)
current_time = date.time()
return midday_upload_time <= current_time
def next_working_hour(date = None):
if not date:
date = datetime.now()
if is_working_hours(date):
return date
potential_start = date.replace(hour=8, minute=0, second=0, microsecond=0)
if date > potential_start:
potential_start += timedelta(days=1)
while not is_working_hours(potential_start):
potential_start += timedelta(days=1)
return potential_start
if __name__ == '__main__':
# Test Times
assert is_working_hours(datetime(2025, 6, 20, 16,54, 0))
assert is_working_hours(datetime(2025, 6, 20, 18,54, 0))
assert is_working_hours(datetime(2025, 6, 20, 19,0, 0))
assert not is_working_hours(datetime(2025, 6, 20, 19,1, 0))
assert is_working_hours(datetime(2025, 6, 20, 8,0, 0))
assert not is_working_hours(datetime(2025, 6, 20, 7,59, 59))
# Test Week Day
assert not is_working_hours(datetime(2025, 6, 21, 16,54, 0))
assert not is_working_hours(datetime(2025, 6, 21, 18,54, 0))
assert not is_working_hours(datetime(2025, 6, 21, 19,0, 0))
assert not is_working_hours(datetime(2025, 6, 21, 19,1, 0))
assert not is_working_hours(datetime(2025, 6, 21, 8,0, 0))
assert not is_working_hours(datetime(2025, 6, 21, 7,59, 59))
print(next_working_hour(datetime(2025, 6, 20, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 21, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 22, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 23, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 24, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 19, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 20, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 21, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 22, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 23, 19,1, 0)))