2010-08-16 3 views
8

J'ai beaucoup de chaînes de date comme Mon, 16 Aug 2010 24:00:00 et certains d'entre eux sont au format 00-23 heures et certains d'entre eux au format 01-24 heures. Je veux obtenir une liste d'objets de date d'eux, mais quand j'essaye de transformer l'exemple de chaîne en objet de date, je dois le transformer de Mon, 16 Aug 2010 24:00:00 en Tue, 17 Aug 2010 00:00:00. Quelle est la manière la plus facile?Comment puis-je convertir l'heure dans une chaîne datetime de 24:00 à 00:00 en Python?

Répondre

8
import email.utils as eutils 
import time 
import datetime 

ntuple=eutils.parsedate('Mon, 16 Aug 2010 24:00:00') 
print(ntuple) 
# (2010, 8, 16, 24, 0, 0, 0, 1, -1) 
timestamp=time.mktime(ntuple) 
print(timestamp) 
# 1282017600.0 
date=datetime.datetime.fromtimestamp(timestamp) 
print(date) 
# 2010-08-17 00:00:00 
print(date.strftime('%a, %d %b %Y %H:%M:%S')) 
# Tue, 17 Aug 2010 00:00:00 

Puisque vous dites que vous avez beaucoup d'entre eux pour fixer, vous devez définir une fonction:

def standardize_date(date_str): 
    ntuple=eutils.parsedate(date_str) 
    timestamp=time.mktime(ntuple) 
    date=datetime.datetime.fromtimestamp(timestamp) 
    return date.strftime('%a, %d %b %Y %H:%M:%S') 

print(standardize_date('Mon, 16 Aug 2010 24:00:00')) 
# Tue, 17 Aug 2010 00:00:00 
+0

+1. Juste parce que je l'ai aimé> 8-) –

+1

+1 parce que je n'ai jamais su que 'email.utils.parsedate()' existait jusqu'à présent et que l'apprentissage est amusant! – jathanism

+0

Oui, j'ai appris à propos de 'email.utils.parsedate' ici sur SO aussi ... :) – unutbu

Questions connexes