Antoine Waehren
81a8247d5a
Ajout de fonctions dans 'date_tools' pour cela. Ajout des prototypes d'interface mis à jour.
183 lines
3.7 KiB
Python
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 |