Python: les bibliothèques Time et Datetime
Par ChatGPT, relecture AMO
Nota: dans la suite de ce post, les réponses sont celles de ChatGPT après qu’il ait eu connaissance d’un script de base.
Très bien, pour afficher la variable lastFiscalYearEnd
avec une couleur différente lorsque le mois n’est pas décembre, nous pouvons utiliser la bibliothèque Colorama
. Assurez-vous d’installer cette bibliothèque si vous ne l’avez pas déjà fait en utilisant la commande pip install colorama
.
Ensuite, nous allons modifier le code pour vérifier si le mois de lastFiscalYearEnd
est décembre ou non, et en fonction de cela, nous allons utiliser Colorama
pour afficher la date avec une couleur différente.
Voici le code ajusté :
import time
from colorama import Fore, Style
# Date clôture comptable
lastFiscalYearEnd = time.localtime(info["lastFiscalYearEnd"])
nextFiscalYearEnd = time.strftime('%d/%m/%Y', time.localtime(info["nextFiscalYearEnd"]))
# Vérification du mois
if lastFiscalYearEnd.tm_mon == 12:
lastFiscalYearEnd_str = time.strftime('%d/%m/%Y', lastFiscalYearEnd)
else:
lastFiscalYearEnd_str = Fore.RED + time.strftime('%d/%m/%Y', lastFiscalYearEnd) + Style.RESET_ALL
print("Clôture exerc. préc.: " + lastFiscalYearEnd_str + "\tClôture exerc. suiv.: " + nextFiscalYearEnd)
Dans ce code, nous utilisons time.localtime()
pour obtenir un objet struct_time à partir de la date lastFiscalYearEnd
. Ensuite, nous vérifions si le mois (représenté par lastFiscalYearEnd.tm_mon
) est égal à 12 (décembre) ou non. Si c’est le cas, nous affichons simplement la date sans couleur. Sinon, nous utilisons Fore.RED
de Colorama
pour afficher la date en rouge.
N’oubliez pas d’importer Fore
et Style
de Colorama
pour utiliser les styles de couleur. Et si le mois n’est pas décembre, nous utilisons Style.RESET_ALL
pour réinitialiser la couleur par défaut après avoir affiché la date, afin que le texte suivant soit affiché normalement.
Assurez-vous d’avoir Colorama
installé et exécutez le code pour voir la différence de couleur pour la date lorsque le mois n’est pas décembre.
Bibliothèque time
Bien sûr ! Dans Python, le module time
fournit des fonctions pour travailler avec les dates et les heures. Lorsque vous utilisez la fonction time.localtime()
, elle renvoie un objet struct_time
qui contient différentes informations sur la date et l’heure.
Le membre .tm_mon
de l’objet struct_time
représente le mois sous forme d’entier. Voici les attributs principaux de l’objet struct_time
:
.tm_year
: L’année en cours (par exemple, 2023)..tm_mon
: Le mois en cours sous forme d’entier (valeurs de 1 à 12, où 1 représente janvier et 12 représente décembre)..tm_mday
: Le jour du mois en cours (valeurs de 1 à 31)..tm_hour
: L’heure du jour (valeurs de 0 à 23)..tm_min
: Les minutes de l’heure en cours (valeurs de 0 à 59)..tm_sec
: Les secondes de l’heure en cours (valeurs de 0 à 61).
Dans le code que nous avons ajusté, nous utilisons lastFiscalYearEnd.tm_mon
pour obtenir le mois à partir de l’objet struct_time
correspondant à la date lastFiscalYearEnd
. Ensuite, nous comparons cette valeur avec 12 pour vérifier si le mois est décembre ou non.
Si lastFiscalYearEnd.tm_mon
est égal à 12, cela signifie que le mois est décembre, et nous affichons simplement la date sans couleur supplémentaire. Si lastFiscalYearEnd.tm_mon
est différent de 12, cela signifie que le mois n’est pas décembre, et nous utilisons Colorama
pour afficher la date en rouge (ou toute autre couleur de votre choix) pour la distinguer.
En résumé, .tm_mon
est un attribut de l’objet struct_time
qui nous permet d’accéder au mois d’une date spécifique.
Bibliothèque datetime
Très bien ! Nous pouvons appliquer le même principe d’utilisation de Colorama
pour mettre en évidence la date lastDividendDate
si plus de 18 mois se sont écoulés depuis cette date. Pour cela, nous allons calculer la différence entre la date actuelle et lastDividendDate
, puis vérifier si cette différence est supérieure à 18 mois.
Voici le code ajusté :
import time
from datetime import datetime
from colorama import Fore, Style
# Conversion de la date en objet datetime
lastDividendDate_str = time.strftime('%d/%m/%Y', time.localtime(info["lastDividendDate"]))
lastDividendDate = datetime.strptime(lastDividendDate_str, '%d/%m/%Y')
# Calcul de la différence entre la date actuelle et lastDividendDate
current_date = datetime.now()
time_difference = current_date - lastDividendDate
# Vérification si plus de 18 mois se sont écoulés
if time_difference.days > 18 * 30: # En supposant qu'un mois a en moyenne 30 jours
lastDividendDate_str = Fore.RED + lastDividendDate_str + Style.RESET_ALL
print("Dernier vers. dividende: " + lastDividendDate_str)
Dans ce code, nous utilisons la bibliothèque datetime
pour manipuler les dates. Nous convertissons d’abord la date lastDividendDate_str
(dans le format “jour/mois/année”) en un objet datetime
à l’aide de datetime.strptime()
. Ensuite, nous obtenons la date actuelle à l’aide de datetime.now()
.
En soustrayant la date lastDividendDate
de la date actuelle, nous obtenons un objet timedelta
, qui représente la différence entre les deux dates sous forme de durée.
Nous multiplions ensuite le nombre de mois (18) que nous souhaitons comparer par 30 (en supposant en moyenne que chaque mois a 30 jours) pour obtenir le nombre de jours équivalents à 18 mois.
Enfin, nous vérifions si la différence de temps en jours (time_difference.days
) est supérieure à 18 mois. Si c’est le cas, nous utilisons Fore.RED
pour afficher la date en rouge, indiquant ainsi que plus de 18 mois se sont écoulés depuis la dernière date de dividende.
N’oubliez pas d’importer Fore
et Style
de Colorama
pour utiliser les styles de couleur. Avec ce code, vous devriez maintenant pouvoir mettre en évidence la date lastDividendDate
lorsque plus de 18 mois se sont écoulés depuis cette date.
Travailler en secondes
Tout à fait ! Vous avez raison, nous pouvons éviter de reconvertir lastDividendDate
en objet datetime
si nous utilisons directement la valeur stockée dans info["lastDividendDate"]
. Nous pouvons travailler avec les timestamps (valeurs de temps en secondes depuis le 1er janvier 1970) pour effectuer la comparaison.
Voici le code ajusté en utilisant directement info["lastDividendDate"]
:
import time
from colorama import Fore, Style
# Récupération de la date de dividende au format timestamp
lastDividendDate_timestamp = info["lastDividendDate"]
# Conversion du timestamp en date au format "jour/mois/année"
lastDividendDate_str = time.strftime('%d/%m/%Y', time.localtime(lastDividendDate_timestamp))
# Calcul de la différence entre la date actuelle et lastDividendDate
current_timestamp = time.time()
time_difference = current_timestamp - lastDividendDate_timestamp
# Vérification si plus de 18 mois se sont écoulés
if time_difference > 18 * 30 * 24 * 60 * 60: # En supposant qu'un mois a en moyenne 30 jours et un jour a 24 heures
lastDividendDate_str = Fore.RED + lastDividendDate_str + Style.RESET_ALL
print("Dernier vers. dividende: " + lastDividendDate_str)
Dans ce code, nous utilisons info["lastDividendDate"]
directement pour obtenir le timestamp de la dernière date de dividende. Ensuite, nous effectuons le même calcul de la différence de temps en secondes entre la date actuelle et lastDividendDate_timestamp
pour vérifier si plus de 18 mois se sont écoulés depuis cette date.
Lorsque la différence de temps dépasse 18 mois (en secondes), nous utilisons Fore.RED
pour afficher la date en rouge, sinon, nous l’affichons normalement.
Ce code devrait fonctionner de manière similaire à la version précédente, mais en évitant la conversion supplémentaire de la date en objet datetime
.