web-dev-qa-db-fra.com

quelle est la bonne façon de convertir entre mysql datetime et python timestamp?

selon http://dev.mysql.com/doc/refman/5.0/en/datetime.html . je dois trouver un moyen de convertir la valeur de chaîne "AAAA-MM-JJ HH: MM: SS" en un horodatage int.

j'ai recherché dans le doc de python.

j'ai essayé:

print(time.strptime('2013-01-12 15:27:43', '%Y-%m-%d %H:%M:%S'))   

python me donne un résultat comme celui-ci.

time.struct_time (tm_year = 2013, tm_mon = 1, tm_mday = 12, tm_hour = 15, tm_min = 27, tm_sec = 43, tm_wday = 5, tm_yday = 12, tm_isdst = -1)

j'ai essayé de convertir l'horodatage au format AAAA-MM-JJ HH: MM: SS

print(time.strftime('%Y-%m-%d %H:%M:%S',time.time()))

python me donne une erreur de type.

j'utilise uniquement l'horodatage pour calculer l'heure et la date, j'espère qu'il existe déjà un moyen en python, simple et efficace, et je n'ai pas à créer de données temporaires.

selon la réponse, j'écris deux méthodes. j'espère que ce serait utile

import time

def convertTimestampToSQLDateTime(value):
    return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(value))

def convertSQLDateTimeToTimestamp(value):
    return time.mktime(time.strptime(value, '%Y-%m-%d %H:%M:%S'))
28
Max

Heureux de mettre à jour cela si je ne comprends pas bien, mais voici quelques exemples qui peuvent vous aider. Notez que cela utilise le module datetime au lieu de time.

>>> import datetime

Ici, nous mettons en place un exemple d'horodatage ts et un format f:

>>> ts = '2013-01-12 15:27:43'
>>> f = '%Y-%m-%d %H:%M:%S'

Semblable à ce que vous avez fait ci-dessus, nous utilisons la fonction strptime (de datetime.datetime) Pour convertir notre chaîne en un objet datetime en fonction du paramètre de formatage:

>>> datetime.datetime.strptime(ts, f)
datetime.datetime(2013, 1, 12, 15, 27, 43)

Maintenant à l'envers - ici, nous utilisons datetime.datetime.now() pour obtenir l'heure actuelle en tant qu'objet datetime:

>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 1, 12, 0, 46, 54, 490219)

Dans le cas datetime, la méthode strftime est en fait appelée sur l'objet datetime lui-même, avec le paramètre de formatage comme argument:

>>> now.strftime(f)   
'2013-01-12 00:46:54'

Dans votre situation, la raison pour laquelle vous obtenez une erreur est que time.time() renvoie un flottant:

>>> time.time()
1357980846.290231

Mais time.strftime A besoin d'un tuple time, similaire à ce que vous aviez ci-dessus. Sans entrer dans la spirale exaspérante qu'est le temps, une fonction telle que time.localtime() renverra le tuple time susmentionné et retournera comme vous vous y attendez:

>>> now = time.localtime()
>>> now
time.struct_time(tm_year=2013, tm_mon=1, tm_mday=12, tm_hour=0, tm_min=55, tm_sec=55, tm_wday=5, tm_yday=12, tm_isdst=0)
>>> f = '%Y-%m-%d %H:%M:%S'
>>> time.strftime(f, now)
'2013-01-12 00:55:55'
42
RocketDonkey