Je veux lire dans un temps Unix dans un horodatage et attribuer le fuseau horaire de Boise. Le fuseau horaire actuel est "MDT - Mountain Daylight Time (Daylight Saving Time)". Il passera au MST pendant l'hiver.

Quel est le bon fuseau horaire à utiliser, quand je veux qu'il ne dépende pas de l'heure d'été / d'hiver?

Je veux avoir quelque chose comme ça

pd.Timestamp(1513393355, unit='s', tz='US/Pacific') 
1
Lorenz 17 mars 2019 à 18:26

2 réponses

Meilleure réponse

Cela interprète 1513393355 comme un horodatage en UTC, puis convertit l'horodatage dans le fuseau horaire America/Boise :

In [57]: pd.Timestamp(1513393355, unit='s', tz='UTC').tz_convert('America/Boise')
Out[57]: Timestamp('2017-12-15 20:02:35-0700', tz='America/Boise')

Pandas dépend de pytz pour les calculs de fuseau horaire. pytz dépend de la base de données Olson. La base de données Olson contient un historique des décalages utc pour chaque fuseau horaire. Vous n'avez donc pas à vous soucier de savoir si l'heure d'été est en vigueur à une date particulière. tz_convert s'en chargera pour vous.

Vous pouvez consulter toutes les options en utilisant pytz.timezones.

Il existe un fuseau horaire US/Mountain, mais il est obsolète. Consultez la réponse de Matt Johnson pour plus d'informations sur les options pertinentes.

1
unutbu 17 mars 2019 à 17:47

Quelques choses:

  • D'une manière générale, il faut utiliser America/Denver pour la majeure partie de l'heure des Rocheuses aux États-Unis, qui bascule actuellement entre MST (UTC-7) et MDT (UTC-6).

  • Utilisez America/Phoenix pour la partie de l'heure des Rocheuses aux États-Unis qui n'utilise pas actuellement l'heure d'été, comme c'est le cas dans la plupart (mais pas dans la totalité) de l'Arizona.

    • Cependant, sachez qu'il a utilisé l'heure d'été dans le passé, pour la dernière fois en 1968.
  • Utilisez Etc/GMT+7 si vous avez besoin d'un décalage fixe UTC-7 et n'a jamais eu l'heure d'été. Sachez que le signe du décalage est inversé intentionnellement (Etc/GMT+7 = UTC-7).

    • Si vous utilisez cette zone pour autre chose que les heures de navigation en mer, vous devriez probablement réévaluer cette décision. En d'autres termes, si vos données correspondent à un fuseau horaire local qui utilise l'heure d'été, vous ne devez pas choisir un fuseau qui l'ignore.
  • Vous pouvez utiliser America/Boise, mais vous ne devez l'utiliser que pour les régions du sud de l'Idaho et de l'est de l'Oregon qui ont commencé l'heure d'été quatre semaines plus tard en 1974 (1974-02-03 au lieu de 1974-01-06), comme décrit dans le commentaire des sources de la base de données TZ :

    # Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,
    # Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,
    # Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome,
    # Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,
    # Teton, Twin Falls, Valley, Washington counties, and the southern
    # quarter of Idaho county) and eastern Oregon (most of Malheur County)
    # switched four weeks late in 1974.
    
    • Si vous ne travaillez pas avec des horodatages de 1974, vous pouvez ignorer cette zone et utiliser simplement America/Denver.
  • Vous pouvez utiliser US/Mountain, mais comprenez qu'il est lié en tant qu'alias de America/Denver et est considéré comme obsolète. Il existe pour la compatibilité descendante.

2
Matt Johnson-Pint 17 mars 2019 à 17:30