Python: Comment puis-je obtenir du temps à partir d'une datetime.timedelta objet?
une table de base de données mysql a une colonne dont le type de données est le temps (http://dev.mysql.com/doc/refman/5.0/en/time.html). Lorsque les données de la table sont consultées, Python renvoie la valeur de cette colonne comme datetime.objet timedelta. Comment puis-je extraire le temps de ceci? (Je n'ai pas vraiment compris ce que timedelta signifie d'après les manuels de python).
<!-Par exemple: La colonne du tableau contient la valeur "18: 00:00" Python-MySQLdb renvoie ceci en tant que datetime.timedelta(0, 64800)s'il vous Plaît ignorer ce qui est en dessous (elle retourne une valeur différente) -
ajouté: indépendamment de la valeur de temps dans le tableau, python-MySQLdb semble ne retourner que datetime.timedelta (0, 64800).
Note: j'utilise Python 2.4
2 réponses
il est étrange que Python renvoie la valeur comme un datetime.timedelta
. Il devrait probablement revenir un datetime.time
. Quoi qu'il en soit, on dirait qu'il retourne le temps écoulé depuis minuit (en supposant que la colonne dans le tableau est 18:00 PM). Pour se convertir à un datetime.time
, vous pouvez effectuer les opérations suivantes::
value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()
datetime.datetime.min
et datetime.time()
sont, bien sûr, documentés dans le cadre du datetime module si vous souhaitez plus d'informations.
datetime.timedelta
est, par ailleurs, un représentation de la différence entre deux datetime.datetime
valeurs. Donc, si vous soustrayez un datetime.datetime
à partir d'un autre, vous obtiendrez un datetime.timedelta
. Et si vous ajoutez un datetime.datetime
avec un datetime.timedelta
, vous obtiendrez un datetime.datetime
. C'est comme ça que le code ci-dessus fonctionne.
il me semble que le type de temps dans MySQL est destiné à représenter les intervalles de temps comme datetime.timedelta fait en Python. D'après les documents que vous avez cités:
les valeurs de temps peuvent varier de '-838:59:59' à '838:59:59'. La partie des heures peut être si grande parce que le type de temps peut être utilisé non seulement pour représenter une heure de la journée (qui doit être inférieure à 24 heures), mais aussi le temps écoulé ou un intervalle de temps entre deux événements (qui peut être beaucoup plus de 24 heures, ou même négatif.)
une alternative à la conversion à partir de datetime.timedelta à datetime.le temps serait de changer le type de colonne en DATETIME et de ne pas utiliser les champs de date.
-Insérer:
tIn = datetime.datetime(
year=datetime.MINYEAR,
month=1,
day=1,
hour=10,
minute=52,
second=10
)
cursor.execute('INSERT INTO TableName (TimeColumn) VALUES (%s)', [tIn])
- Select:
cursor.execute('SELECT TimeColumn FROM TableName')
result = cursor.fetchone()
if result is not None:
tOut = result[0].time()
print 'Selected time: {0}:{1}:{2}'.format(tOut.hour, tOut.minute, tOut.second)
datetime.time() est appelée sur un objet datetime pour obtenir un objet de temps.