antux18
8306e33db0
Amélioration de l'affichage ("1 heure" au lieu de "1 heures", par exemple). Amélioration du README. Diverses corrections des commentaires.
178 lines
3.9 KiB
Python
178 lines
3.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Thu Feb 24 16:36:32 2022
|
|
|
|
@author: antoine
|
|
"""
|
|
|
|
################
|
|
### UniSquat ###
|
|
################
|
|
|
|
"""
|
|
Une application pour afficher les salles libres 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
|
|
-------
|
|
tuple
|
|
Temps en heures et 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()
|
|
if int(deltasec / 60 + 0.5) > 1 :
|
|
remain_time_str = str(int(deltasec / 60 + 0.5)) + " minutes"
|
|
else :
|
|
remain_time_str = str(int(deltasec / 60 + 0.5)) + " minute"
|
|
if deltasec / 60 + 0.5 >= 60 : # Conversion en heures:minutes si les minutes dépassent 60
|
|
deltasec = minutes_convert(deltasec / 60 + 0.5)
|
|
if deltasec[0] > 1 :
|
|
remain_time_str = str(deltasec[0]) + " heures"
|
|
else :
|
|
remain_time_str = str(deltasec[0]) + " heure"
|
|
if deltasec[1] > 0 :
|
|
remain_time_str += " " + str(deltasec[1]) + " minutes"
|
|
|
|
return remain_time_str |