<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Les dates et les timezone
La librairie standard ne définit pas de timezone. Elle fournit une classe timezone, spécialisation simple de tzinfo qui s'instancie en passant en paramètre un timedelta. Celui-ci doit avoir +/- 12 heures.
Step1:  Avec la librairie pytz
Dans la cellule suivante, nous définissons un timezone pour la France
Step2:  Les valeurs possibles pour les timezone sont fournies par une constante.
Step3:  Nous créons d'abord une date naive à laquelle nous renseignons le timezone.
Step4:  Nous utilisons cette même date pour créer une date aware à New York.
Step5:  Nous changeons le timezone de cette date aware des US en France.
Step6:  Cette nouvelle date n'affiche pas les même heures, mais n'a pas non plus le même timezone. Nous pouvons vérifier qu'il s'agit de la même date.
Step7:  Les deux dates localisées contiennent la même information d'heure. Nous vérifions qu'il ne s'agit pas du même instant et qu'il y a un décalage d'une heure.
Step8:  Prise en compte du changement d'heure
Les problèmes de timezone ne se limitent pas au fuseau horaire mais également à la différence en fonction du changement d'heure. Ci dessous, nous définissons deux instants à minuit pour un jour en heure d'hiver et un jour en heure d'été.
Step9:  Voir donc les bonnes pratiques pour manipuler les dates comme 
<ASSISTANT_TASK:>
Python Code:
import datetime as dt
print("Maintenant naif  :", dt.datetime.now())
instant = dt.datetime.now(dt.timezone(dt.timedelta(hours=2)))
print("Maintenant aware :", instant)
print("Info timezone    :", instant.tzinfo)
instant = dt.datetime.now(dt.timezone(dt.timedelta(hours=2), name="France"))
print("Maintenant aware :", instant)
print("Info timezone    :", instant.tzinfo)
instant = dt.datetime.now(dt.timezone(dt.timedelta(hours=2), name="plus_2"))
autre_instant = dt.datetime.now(dt.timezone(dt.timedelta(hours=1), name="plus_1"))
print("Maintenant aware 2 :", instant)
print("Maintenant aware 1 :", autre_instant)
autre_instant - instant
Explanation: Les dates et les timezone
La librairie standard ne définit pas de timezone. Elle fournit une classe timezone, spécialisation simple de tzinfo qui s'instancie en passant en paramètre un timedelta. Celui-ci doit avoir +/- 12 heures.
End of explanation
import pytz
paris_tz = pytz.timezone('Europe/Paris')
print(paris_tz)
paris_tz
Explanation: Avec la librairie pytz
Dans la cellule suivante, nous définissons un timezone pour la France
End of explanation
pytz.all_timezones
Explanation: Les valeurs possibles pour les timezone sont fournies par une constante.
End of explanation
now_naive = dt.datetime.now()
print("Instant actuel naif:", now_naive)
h_paris_aware = paris_tz.localize(now_naive)
print("France, aware      :", h_paris_aware)
Explanation: Nous créons d'abord une date naive à laquelle nous renseignons le timezone.
End of explanation
new_york_tz = pytz.timezone('America/New_York')
print("Instant actuel naif:", now_naive)
h_new_york_aware = new_york_tz.localize(now_naive)
print("New York, aware    :", h_new_york_aware)
Explanation: Nous utilisons cette même date pour créer une date aware à New York.
End of explanation
h_new_york_in_paris = h_new_york_aware.astimezone(paris_tz)
print("France from US :", h_new_york_in_paris)
Explanation: Nous changeons le timezone de cette date aware des US en France.
End of explanation
h_new_york_aware == h_new_york_in_paris
Explanation: Cette nouvelle date n'affiche pas les même heures, mais n'a pas non plus le même timezone. Nous pouvons vérifier qu'il s'agit de la même date.
End of explanation
print("Heure US   :", h_new_york_aware.hour)
print("Heure Fr   :", h_paris_aware.hour)
print("Différence :", h_new_york_aware - h_paris_aware)
Explanation: Les deux dates localisées contiennent la même information d'heure. Nous vérifions qu'il ne s'agit pas du même instant et qu'il y a un décalage d'une heure.
End of explanation
winter_day = paris_tz.localize(dt.datetime(2019, 3, 30))
summer_day = paris_tz.localize(dt.datetime(2019, 4, 2))
print("Hiver :", winter_day)
print("Été.  :", summer_day)
print("Différence :", summer_day - winter_day)
after_3_days = winter_day + dt.timedelta(days=3)
print("3 jours plus tard :", after_3_days)
print("3 jours plus tard relocalisé :", after_3_days.astimezone(paris_tz))
Explanation: Prise en compte du changement d'heure
Les problèmes de timezone ne se limitent pas au fuseau horaire mais également à la différence en fonction du changement d'heure. Ci dessous, nous définissons deux instants à minuit pour un jour en heure d'hiver et un jour en heure d'été.
End of explanation
utc_tz = pytz.timezone('UTC')
meeting = dt.datetime(2020, 10, 15, 15, 30)
paris_tz = pytz.timezone('Europe/Paris')
meeting = meeting.astimezone(paris_tz).astimezone(utc_tz)
print(meeting)
new_york_tz = pytz.timezone('America/New_York')
print(f"for New Yoerkers : {meeting.astimezone(new_york_tz)}")
Explanation: Voir donc les bonnes pratiques pour manipuler les dates comme :
End of explanation
<END_TASK>