10 choses surprenantes que vous pouvez faire avec le module DateTime de Python

 10 choses surprenantes que vous pouvez faire avec le module DateTime de Python


10 choses surprenantes que vous pouvez faire avec le module DateTime de Python
Image de l’auteur | Chatte

Introduction

Python intégré datetime Le module peut facilement être considéré comme la bibliothèque incontournable pour le traitement de la date et du formatage de la date et du temps dans l’écosystème. La plupart des codeurs Python connaissent la création datetime objets, les formatant en chaînes et effectuant une arithmétique de base. Cependant, ce module puissant, parfois aux côtés de bibliothèques connexes telles que calendaroffre une tonne de fonctionnalités supplémentaires au-delà des bases qui peuvent résoudre des problèmes complexes de date et de temps avec une facilité surprenante.

Cet article examine 10 choses utiles – et peut-être surprenantes – que vous pouvez accomplir avec Python datetime module. De la navigation des fuseaux horaires au calcul des occurrences spécifiques en semaine, ces exemples démontreront la polyvalence de la boîte à outils de date et d’heure de Python.

1. Trouver le jour de la semaine

Au-delà de la simple connaissance de la date, vous devez souvent connaître le jour de la semaine. Le datetime Le module rend ce trivial. Chaque datetime L’objet a un weekday() Méthode, qui revient le jour de la semaine en tant qu’ender (le lundi est 0, le dimanche est 6), et un strftime() Méthode, qui peut formater la date pour afficher le nom de la journée.

import datetime

# Pick a date
today = datetime.date(2025, 7, 10)

# Get the day of the week (Monday is 0)
day_of_week_num = today.weekday()
print(f"Day of the week (numeric): {day_of_week_num}")

# Get the full name of the day
day_name = some_date.strftime("%A")
print(f"The date {today} is a {day_name}")

Sortir:

The date 2025-07-10 is a Thursday

2. Calcul de l’heure jusqu’à un futur événement

Avez-vous déjà eu besoin d’un simple compte à rebours? Avec datetimevous pouvez facilement calculer l’heure restante jusqu’à une date et une heure futures spécifiques. En soustrayant le courant datetime D’un futur, vous obtenez un timedelta objet qui représente la différence.

import datetime

# Define a future event
new_year_2050 = datetime.datetime(2050, 1, 1, 0, 0, 0)

# Get the current time
now = datetime.datetime.now()

# Calculate the difference
time_left = new_year_2050 - now

print(f"Time left until New Year 2050: {time_left}")

Sortir:

Time left until New Year 2050: 8940 days, 16:05:52.120836

3. Travailler avec les fuseaux horaires

La gestion des fuseaux horaires est délicat. UN naïf datetime L’objet n’a pas de données de fuseau horaire, tandis qu’un conscient L’objet possède ces données. En utilisant le pytz bibliothèque (ou la zoneinfo Dans Python 3.9+) rend le travail avec les fuseaux horaires gérables.

Par exemple, vous pouvez utiliser un temps de fuseau horaire comme base pour la conversion à un autre fuseau horaire comme ceci:

import datetime
from pytz import timezone

# Create a timezone-aware datetime for New York
nyc_tz = timezone('America/New_York')
nyc_time = datetime.datetime.now(nyc_tz)
print(f"New York Time: {nyc_time}")

# Convert it to another timezone
london_tz = timezone('Europe/London')
london_time = nyc_time.astimezone(london_tz)
print(f"London Time: {london_time}")

Sortir:

New York Time: 2025-07-10 07:57:53.900220-04:00
London Time: 2025-07-10 12:57:53.900220+01:00

4. Obtenir le dernier jour d’un mois

Découvrir le dernier jour d’un mois n’est pas simple car les mois ont un nombre de jours différents. Vous pouvez écrire une logique pour gérer 30/31 jours avec février (n’oubliez pas les années de saut!), Ou vous pouvez utiliser une astuce intelligente avec datetime et timedelta. La stratégie consiste à trouver le premier jour du suivant mois, puis soustrayez un jour.

import datetime

def get_last_day_of_month(year, month):
    # Handle month rollover for December -> January
    if month == 12:
        next_month_first_day = datetime.date(year + 1, 1, 1)
    else:
        next_month_first_day = datetime.date(year, month + 1, 1)
    
    # Subtract one day to get the last day of the current month
    return next_month_first_day - datetime.timedelta(days=1)

# Example: Get the last day of February 2024 (a leap year)
last_day = get_last_day_of_month(2024, 2)
print(f"The last day of February 2024 is: {last_day}")

Sortir:

The last day of February 2024 is: 2024-02-29

5. Calcul de votre âge précis

Vous pouvez utiliser datetime Pour calculer l’âge de quelqu’un jusqu’à la journée. La logique consiste à soustraire la date de naissance de la date actuelle, puis à effectuer un petit ajustement pour expliquer si l’anniversaire de la personne s’est encore produit cette année.

import datetime

def calculate_age(birthdate):
    today = datetime.date.today()
    age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
    return age

# Example usage
picasso_birthdate = datetime.date(1881, 10, 25)
picasso_age = calculate_age(picasso_birthdate)
print(f"If alive today, Pablo Picasso would be {picasso_age} years old.")

Sortir:

If alive today, Pablo Picasso would be 143 years old.

6. itérer à travers une gamme de dates

Parfois, vous devez effectuer une opération pour chaque jour dans une plage de dates spécifique. Vous pouvez facilement parcourir les dates en commençant par un objet de date et en ajoutant à plusieurs reprises un timedelta d’un jour jusqu’à ce que vous atteigniez la date de fin.

import datetime

start_date = datetime.date(2025, 1, 1)
end_date = datetime.date(2025, 1, 7)
day_delta = datetime.timedelta(days=1)

current_date = start_date
while current_date <= end_date:
    print(current_date.strftime('%Y-%m-%d, %A'))
    current_date += day_delta

Sortir:

2025-01-01, Wednesday
2025-01-02, Thursday
2025-01-03, Friday
2025-01-04, Saturday
2025-01-05, Sunday
2025-01-06, Monday
2025-01-07, Tuesday

7. Analyse des dates des formats de chaîne non standard

Le strptime() La fonction est utile pour convertir les chaînes en datetime objets. Il est incroyablement flexible et peut gérer une grande variété de formats en utilisant des codes de format spécifiques. Ceci est essentiel pour traiter les données de différentes sources qui peuvent ne pas utiliser un format ISO standard.

import datetime

date_string_1 = "July 4, 1776"
date_string_2 = "1867-07-01 14:30:00"

# Parse the first string format
dt_object_1 = datetime.datetime.strptime(date_string_1, "%B %d, %Y")
print(f"Parsed object 1: {dt_object_1}")

# Parse the second string format
dt_object_2 = datetime.datetime.strptime(date_string_2, "%Y-%m-%d %H:%M:%S")
print(f"Parsed object 2: {dt_object_2}")

Sortir:

Parsed object 1: 1776-07-04 00:00:00
Parsed object 2: 1867-07-01 14:30:00

8. Trouver le nième jour de la semaine d’un mois

Voulez-vous connaître la date du troisième jeudi de novembre? Le calendar le module peut être utilisé à côté datetime pour résoudre ceci. Le monthcalendar() La fonction renvoie une matrice représentant les semaines d’un mois, que vous pouvez ensuite analyser.

import calendar

# calendar.weekday() Monday is 0 and Sunday is 6
# calendar.Thursday is 3
cal = calendar.Calendar()

# Get a matrix of weeks for November 2025
month_matrix = cal.monthdatescalendar(2025, 11)

# Find the third Thursday
third_thursday = (week(calendar.THURSDAY) for week in month_matrix if week(calendar.THURSDAY).month == 11)(2)

print(f"The third Thursday of Nov 2025 is: {third_thursday}")

Sortir:

The third Thursday of Nov 2025 is: 2025-11-20

9. Obtenir le numéro de la semaine ISO

Le ISO 8601 Standard définit un système de numéro de semaine où une semaine commence un lundi. Le isocalendar() La méthode renvoie un tuple contenant l’année ISO, le numéro de la semaine et le jour de la semaine pour une date donnée.

Notez que la date ci-dessous est un jeudi, et devrait donc entraîner un jour de la semaine de 4. Il devrait également s’agir de la 28e semaine de l’année.

import datetime

d = datetime.date(2025, 7, 10)
iso_cal = d.isocalendar()

print(f"Date: {d}")
print(f"ISO Year: {iso_cal(0)}")
print(f"ISO Week Number: {iso_cal(1)}")
print(f"ISO Weekday: {iso_cal(2)}")

Sortir:

Date: 2025-07-10
ISO Year: 2025
ISO Week Number: 28
ISO Weekday: 4

10. Additionner ou soustraire les jours ouvrables

Le calcul des dates futures tout en sautant les week-ends est une exigence commerciale courante. Alors que datetime N’a pas de fonction intégrée pour cela, vous pouvez écrire une fonction d’assistance simple en utilisant timedelta et le weekday() méthode.

import datetime

def add_business_days(start_date, num_days):
    current_date = start_date
    while num_days > 0:
        current_date += datetime.timedelta(days=1)
        # weekday() returns 5 for Saturday and 6 for Sunday
        if current_date.weekday() < 5:
            num_days -= 1
    return current_date

start = datetime.date(2025, 7, 10) # A Thursday
end = add_business_days(start, 13)

print(f"13 business days after {start} is {end}")
13 business days after 2025-07-10 is 2025-07-29

Emballage

Python datetime Le module est plus qu’un simple outil simple pour stocker les dates. Il fournit un ensemble d’outils flexible et utile pour gérer presque toutes les logiques liées au temps imaginables. En comprenant ses composants principaux – date, time, datetimeet timedelta – et les combinant avec le calendar module ou bibliothèques externes comme pytzvous pouvez résoudre des problèmes complexes du monde réel efficacement et avec précision.

N’oubliez pas de vérifier le datetime module documentation pour plus. Vous pourriez être surpris de ce que vous pouvez accomplir.

Matthew Mayo (@ Mattmayo13) est titulaire d’une maîtrise en informatique et d’un diplôme d’études supérieures en exploration de données. En tant que rédacteur en chef de Kdnuggets & Statologieet rédacteur en chef à Maîtrise de l’apprentissage automatiqueMatthew vise à rendre les concepts de science des données complexes accessibles. Ses intérêts professionnels incluent le traitement du langage naturel, les modèles de langue, les algorithmes d’apprentissage automatique et l’exploration de l’IA émergente. Il est motivé par une mission pour démocratiser les connaissances dans la communauté des sciences des données. Matthew est codant depuis l’âge de 6 ans.





Source link

Related post