web-dev-qa-db-fra.com

Conversion de la date/heure au format AAAAMMJJ/HHMMSS en date/heure Python

J'ai une date au format AAAAMMJJ et une heure au format HHMMSS en tant que chaînes dans les 4ème et 5ème éléments d'une liste. C'EST À DIRE.:

data[4] = '20100304'
data[5] = '082835'

Je crée une instance de date-heure (dans un champ nommé génère) comme ceci:

generatedtime = datetime.datetime(int(data[4][:4]),int(data[4][4:6]),int(data[4][6:]),int(data[5][:2]),int(data[5][2:4]),int(data[5][4:6]))

Étant donné que le format d'entrée ne peut pas changer, existe-t-il une méthode plus propre pour créer mon instance d'objet datetime?

18
Wes

Pas besoin d'importer time; datetime.datetime.strptime peut le faire lui-même.

import datetime
dt=datetime.datetime.strptime(data[4]+data[5],'%Y%m%d%H%M%S')
print(dt)
# 2010-03-04 08:28:35

Pour plus d’informations sur les codes de format disponibles (par exemple, %Y%m%d%H%M%S), voir docs pour strftime.

40
unutbu

Vous pouvez jeter un oeil à time.strptime .

import time
time.strptime('20100304 082835', '%Y%m%d %H%M%S')

Ce qui précède suppose une horloge de 24 heures (%H). Utilisez plutôt %I si vous utilisez une horloge de 12 heures.

Pour une liste complète des directives de format disponibles, consultez la documentation pour time.strftime

4
Mark Biek
import time, datetime

x = time.strptime("30 Nov 00", "%d %b %y")
datetime.datetime(x)

Vous pouvez également fournir votre propre format de chaîne de date, voici doc .

0
gruszczy

Vous pouvez nettoyer un peu votre code existant avec un générateur (équivalent à une carte):

generatedtime = datetime.datetime( *(int(x) for x in
   (data[4][:4], data[4][4:6], data[4][6:], data[5][:2], data[5][2:4],data[5][4:6])
   ) )

ou même, si vous êtes fou comme un renard, vous pouvez rendre la déclaration datetime encore plus nette (au détriment de l'ajout d'une ligne ridicule):

slices = ( (4, slice(4)), (4, slice(4,6) ), (4, slice(6,None)), (5, slice(2) ), (5, slice(2,4) ), (5, slice(4,6)) )
generatedtime = datetime.datetime( *(int(data[i][s]) for (i,s) in slices) )
0
Seth Johnson