Table des matières
1. Use datetime with zoneinfo (Python 3.9+)
2. For older Python versions (3.6–3.8): Use pytz
3. Work in UTC internally
4. Parse and format timezone-aware strings
Key Tips
Maison développement back-end Tutoriel Python Comment travailler avec les fuseaux horaires à Python?

Comment travailler avec les fuseaux horaires à Python?

Aug 05, 2025 pm 04:53 PM
python Fuseau horaire

Use zoneinfo for Python 3.9+ to create timezone-aware datetimes and convert between timezones with astimezone(); 2. For Python 3.6–3.8, use pytz with localize() to avoid DST errors; 3. Always work in UTC internally and convert to local time only for display; 4. Parse timezone-aware strings using fromisoformat() or dateutil.parser, and avoid naive and aware datetime comparisons, ensuring consistent, unambiguous time handling in applications.

How to work with timezones in Python?

Working with timezones in Python can be tricky, but with the right tools and understanding, it becomes manageable. The key is to always be aware of whether your datetime objects are naive (no timezone info) or aware (include timezone info), and to convert between timezones safely.

Here’s how to handle timezones properly in Python:


1. Use datetime with zoneinfo (Python 3.9+)

The modern and recommended way is to use the built-in zoneinfo module (available in Python 3.9+). It uses the IANA timezone database and doesn’t require external libraries.

from datetime import datetime
from zoneinfo import ZoneInfo

# Create a datetime with a specific timezone
local_time = datetime(2024, 4, 5, 12, 0, 0, tzinfo=ZoneInfo("America/New_York"))
print(local_time)  # 2024-04-05 12:00:00-04:00

# Convert to another timezone
utc_time = local_time.astimezone(ZoneInfo("UTC"))
print(utc_time)  # 2024-04-05 16:00:00+00:00

# Get current time in a timezone
now_in_london = datetime.now(ZoneInfo("Europe/London"))
print(now_in_london)

⚠️ Always use astimezone() to convert between timezones, not just assigning tzinfo.


2. For older Python versions (3.6–3.8): Use pytz

If you're on Python < 3.9, install and use pytz:

pip install pytz
from datetime import datetime
import pytz

# Define a timezone
tz_ny = pytz.timezone("America/New_York")

# Localize a naive datetime (correct way)
naive = datetime(2024, 4, 5, 12, 0, 0)
local_time = tz_ny.localize(naive)
print(local_time)  # 2024-04-05 12:00:00-04:00

# Convert to UTC
utc_time = local_time.astimezone(pytz.UTC)
print(utc_time)  # 2024-04-05 16:00:00+00:00

❗ Never do datetime(2024, 4, 5, 12, 0, tzinfo=tz_ny) — always use .localize() to avoid DST errors.


3. Work in UTC internally

Best practice: store and compute all timestamps in UTC, then convert to local time only for display.

from datetime import datetime
from zoneinfo import ZoneInfo

# Store time in UTC
utc_now = datetime.now(ZoneInfo("UTC"))

# Convert to user's timezone when displaying
user_tz = ZoneInfo("Asia/Tokyo")
japan_time = utc_now.astimezone(user_tz)
print(f"Current time in Tokyo: {japan_time}")

This avoids ambiguity, especially around daylight saving transitions.


4. Parse and format timezone-aware strings

Use strptime carefully — it may create naive datetimes.

from datetime import datetime
from zoneinfo import ZoneInfo

# Parsing ISO format with timezone
date_str = "2024-04-05T12:00:00+02:00"
dt = datetime.fromisoformat(date_str)
print(dt.tzinfo)  # Offset attached

# Or parse and assign timezone
raw_str = "2024-04-05 10:00:00"
naive = datetime.strptime(raw_str, "%Y-%m-%d %H:%M:%S")
aware = naive.replace(tzinfo=ZoneInfo("Europe/Paris"))

For more complex parsing, consider dateutil:

pip install python-dateutil
from dateutil import parser

dt = parser.parse("2024-04-05 10:00:00 EST")
print(dt)  # Already timezone-aware

Key Tips

  • Always prefer aware datetime objects in production.
  • Never compare naive and aware datetimes — it raises errors in Python 3.9+.
  • Use standard timezone names like America/Los_Angeles, not abbreviations like PST (they’re ambiguous).
  • Be careful with DST: .localize() and .astimezone() handle it correctly; direct tzinfo= does not.

Basically, use zoneinfo if you can, work in UTC, and always be explicit about timezones. It’s not hard once you get the pattern down.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Aug 21, 2025 am 04:12 AM

ClassMethodsinpyThonareBoundTotheclassandNottoiNstances, permettant à ce que

Exemple de file d'attente Python Asyncio Exemple de file d'attente Python Asyncio Aug 21, 2025 am 02:13 AM

Asyncio.Queue est un outil de file d'attente pour une communication sécurisée entre les tâches asynchrones. 1. Le producteur ajoute des données via AwaitQueue.put (élément), et le consommateur utilise AwaitQueue.get () pour obtenir des données; 2. Pour chaque élément que vous traitez, vous devez appeler la file d'attente.task_done () pour attendre que la queue.join () termine toutes les tâches; 3. Utilisez aucun comme signal final pour informer le consommateur de s'arrêter; 4. Lorsque plusieurs consommateurs, plusieurs signaux finaux doivent être envoyés ou toutes les tâches ont été traitées avant d'annuler la tâche; 5. La file d'attente prend en charge la définition de la capacité limite maxsize, les opérations de put et d'obtenir automatiquement la suspension et ne bloquent pas la boucle d'événement, et le programme passe enfin CANC

Comment exécuter un script Python et voir la sortie dans un panneau séparé dans le texte sublime? Comment exécuter un script Python et voir la sortie dans un panneau séparé dans le texte sublime? Aug 17, 2025 am 06:06 AM

ToseepythonOutputinaseParatePaneLinSublimeText, usethebuilt-inbuildSystemBysavingyourfilewitha.pyExtensionAndPressingctrl b (orcmd b) .2nsurethecorrectbuildSystemisselecyBygingTotools → BuildSystem → PythonandConfirming "

Comment utiliser des expressions régulières avec le module RE dans Python? Comment utiliser des expressions régulières avec le module RE dans Python? Aug 22, 2025 am 07:07 AM

Des expressions régulières sont implémentées dans Python via le module RE pour la recherche, la correspondance et la manipulation des chaînes. 1. Utilisez re.search () pour trouver la première correspondance de toute la chaîne, re.match () ne correspond qu'au début de la chaîne; 2. Utilisez des supports () pour capturer les sous-groupes correspondants, qui peuvent être nommés pour améliorer la lisibilité; 3. Re.findall () renvoie toutes les correspondances non chevauchantes, et re.finditer () renvoie l'itérateur de l'objet correspondant; 4. Re.sub () remplace le texte correspondant et prend en charge le remplacement de la fonction dynamique; 5. Les modèles communs incluent \ d, \ w, \ s, etc., vous pouvez utiliser re.ignorecase, re.multiline, re.dotall, re.

Comment construire et exécuter Python dans un texte sublime? Comment construire et exécuter Python dans un texte sublime? Aug 22, 2025 pm 03:37 PM

EnsurePythonisinstalledbyrunningpython--versionorpython3--versionintheterminal;ifnotinstalled,downloadfrompython.organdaddtoPATH.2.InSublimeText,gotoTools>BuildSystem>NewBuildSystem,replacecontentwith{"cmd":["python","-

Comment transmettre des arguments en ligne de commande à un script de Python Comment transmettre des arguments en ligne de commande à un script de Python Aug 20, 2025 pm 01:50 PM

Usysys.argvforsImpleargumentAccess, alors que les anciens ontténomadés et le NOAutomaticalidationorhelpisprovide

Comment déboguer une application Python distante dans VSCODE Comment déboguer une application Python distante dans VSCODE Aug 30, 2025 am 06:17 AM

Pour déboguer une application Python distante, vous devez utiliser Debugpy et configurer le transfert de port et le mappage de chemin: Tout d'abord, installez Debugpy sur la machine distante et modifiez le code pour écouter le port 5678, transférez le port distant vers la zone locale via le tunnel SSH, puis configurez correctement les mappages de chemins locaux et de remotoot. Enfin, démarrez l'application et connectez-vous au débogueur pour réaliser le débogage de points d'arrêt distant, la vérification des variables et le pas de code. L'ensemble du processus dépend de Debugpy, de la transfert de port sécurisée et de la correspondance précise du chemin.

Comment utiliser des variables et des types de données dans Python Comment utiliser des variables et des types de données dans Python Aug 20, 2025 am 02:07 AM

VariablesinPythonarecreatedbyassigningavalueusingthe=operator,anddatatypessuchasint,float,str,bool,andNoneTypedefinethekindofdatabeingstored,withPythonbeingdynamicallytypedsotypecheckingoccursatruntimeusingtype(),andwhilevariablescanbereassignedtodif

See all articles