Comment puis-je utiliser les fuseaux horaires avec un objet datetime en python?
Comment puis-je représenter correctement un autre fuseau horaire dans mon fuseau horaire? L'exemple ci-dessous ne fonctionne que parce que je sais que HAE est une heure devant moi, afin que je puisse décommentez la soustraction de myTimeZone()
import datetime, re
from datetime import tzinfo
class myTimeZone(tzinfo):
"""docstring for myTimeZone"""
def utfoffset(self, dt):
return timedelta(hours=1)
def myDateHandler(aDateString):
"""u'Sat, 6 Sep 2008 21:16:33 EDT'"""
_my_date_pattern = re.compile(r'\w+\,\s+(\d+)\s+(\w+)\s+(\d+)\s+(\d+)\:(\d+)\:(\d+)')
day, month, year, hour, minute, second = _my_date_pattern.search(aDateString).groups()
month = [
'JAN', 'FEB', 'MAR',
'APR', 'MAY', 'JUN',
'JUL', 'AUG', 'SEP',
'OCT', 'NOV', 'DEC'
].index(month.upper()) + 1
dt = datetime.datetime(
int(year), int(month), int(day),
int(hour), int(minute), int(second)
)
# dt = dt - datetime.timedelta(hours=1)
# dt = dt - dt.tzinfo.utfoffset(myTimeZone())
return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, 0, 0, 0)
def main():
print myDateHandler("Sat, 6 Sep 2008 21:16:33 EDT")
if __name__ == '__main__':
main()
- Jetez un oeil à cette réponse. Espérons que cela aide!
- votre format de date/heure peuvent être gérées à l'aide de
email.utils
stdlib package:ts = mktime_tz(parsedate_tz('Sat, 6 Sep 2008 21:16:33 EDT'))
Vous devez vous connecter pour publier un commentaire.
Je recommande
babel
etpytz
lorsque l'on travaille avec les fuseaux horaires. Gardez votre intérieur datetime objets naïfs et en heure UTC et convertir pour votre fuseau horaire pour que la mise en forme. La raison pour laquelle vous voudrez probablement naïve des objets (des objets sans les informations de fuseau horaire), c'est que beaucoup de bibliothèques de base de données et cartes n'ont aucune idée sur les fuseaux horaires.2008-09-22 20:59:00
que l'heure UTC (il est2008-09-22 13:59:00 PDT-0700
).Le Python de la bibliothèque standard ne contient pas d'informations de fuseau horaire, parce que, malheureusement, les données de fuseau horaire changements beaucoup plus rapide que Python. Vous avez besoin d'un module tiers à cet effet; le choix habituel est pytz
Pour le courant de fuseau horaire local, vous pouvez-vous utiliser:
La valeur retournée est en secondes à l'Ouest de l'UTC (avec des zones à l'Est de l'UTC obtenir une valeur négative). C'est le contraire de la façon dont nous avions fait comme elle, d'où le
* -1
.localtime().tm_isdst
sera égal à zéro si l'heure d'été est actuellement pas en effet (même si cela peut ne pas être correcte si une zone a récemment modifié son heure avancée de la loi).time.timezone
ettime.altzone
n'est pas suffisant dans certains casNous sont familiers fuseau horaire coupé de GMT (maintenant UTC), mais Python prend le fuseau horaire coupé de l'Ouest. C'est pourquoi il y a de négatif le fuseau horaire de coupure est en Python, je crois.