UniSquat_Python/date_tools.py
Antoine Waehren 81a8247d5a Amélioration de l'affichage du temps restant pour les salles.
Ajout de fonctions dans 'date_tools' pour cela.
Ajout des prototypes d'interface mis à jour.
2022-05-12 16:53:02 +02:00

183 lines
3.7 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 24 16:36:32 2022
@author: antoine
"""
################
### UniSquat ###
################
"""
Indique toutes les salles disponibles dans les différents départements de
l'Université de Strasbourg.
"""
### Fichier contenant diverses fonctions relatives à la date du jour et à l'heure ##
# Modules :
import datetime
# Fonctions :
def minutes_convert(time_min) :
"""
Convertit un temps en minute en un temps en heures:minutes.
Parameters
----------
time_min : int
Temps en minutes.
Returns
-------
int
Temps en heures.
int
Temps en minutes.
"""
return int(time_min // 60), int(time_min % 60)
def bissextile(year) :
"""
Indique si l'année 'year' est bissextile ou non.
Parameters
----------
year : int
Année dont on veut vérifier la bissextilité.
Returns
-------
bool
'True' si 'year' est bissextile, 'False' sinon.
"""
return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0
def month_days(month, year) :
"""
Renvoie le nombre de jours dans le mois 'month'.
Parameters
----------
month : int (between 1 and 12)
Mois dont on veut connaître le nombre de jours.
year : int
Année, pour vérifier la bissextilité (cas du mois de février).
Returns
-------
int
Nombre de jours dans 'month'.
"""
if month == 2 :
if bissextile(year) :
return 29
else :
return 28
elif month in (4,6,9,11) :
return 30
else :
return 31
def date_input() :
"""
Demande à l'utilisateur d'entrer une date (jour, mois, année,
heure, minutes).
Returns
-------
datetime.datetime()
Date entrée au format datetime.
"""
year = int(input("Entrer l'année.\n> "))
month = 0
while month not in range(1, 13) :
month = int(input("Entrer le mois.\n> "))
mdays = month_days(month, year)
day = 0
while day not in range(1, mdays + 1) :
day = int(input("Entrer le jour.\n> "))
hour = -1
while hour not in range(0, 25) :
hour = int(input("Entrer l'heure.\n> "))
minute = -1
while minute not in range(0, 60) :
minute = int(input("Entrer les minutes.\n> "))
return datetime.datetime(year, month, day, hour, minute)
def hour_disp(time) :
"""
Convertit une heure au format datetime
en une chaîne de caractères.
Parameters
----------
time : datetime.datetime
Heure au format datetime.
Returns
-------
time_str : str
Heure en chaîne de caractères.
"""
time_str = str(time.hour) + ":"
if time.minute < 10 : # Ajout du zéro au début du nombre de minutes
time_str += "0" + str(time.minute)
else :
time_str += str(time.minute)
return time_str
def remain_time(date, rdate) :
"""
Détermine le temps restant avant
la fin/le début de disponibilité d'une salle.
Parameters
----------
date : datetime.datetime
Date choisie au format datetime.
rdate : datetime.datetime
Date de la salle au format datetime.
Returns
-------
remain_time_str : str
Temps restant.
"""
deltasec = rdate.timestamp() - date.timestamp()
remain_time_str = str(int(deltasec / 60 + 0.5)) + " minutes"
if deltasec / 60 + 0.5 >= 60 : # Conversion en heures:minutes si les minutes dépassent 60
deltasec = minutes_convert(deltasec / 60 + 0.5)
remain_time_str = str(deltasec[0]) + " heures"
if deltasec[1] > 0 :
remain_time_str += " " + str(deltasec[1]) + " minutes"
return remain_time_str