web-dev-qa-db-fra.com

Comment convertir datetime en entier en python

comment puis-je convertir AAAA-MM-JJ hh: mm: format ss en entier en python? par exemple 2014-02-12 20:51:14 -> en entier.

je sais comment convertir uniquement hh: mm: ss mais pas aaaa-mm-jj hh: mm: ss

def time_to_num(time_str):
    hh, mm , ss = map(int, time_str.split(':'))
    return ss + 60*(mm + 60*hh)
6
Tomáš Konyárik

Cela dépend de ce que l'entier est censé encoder. Vous pouvez convertir la date en millisecondes par rapport à une heure antérieure. Les gens le font souvent à midi le 1er janvier 1970 ou à 1900, etc., et mesurent le temps sous forme de nombre entier de millisecondes à partir de ce point. Le module datetime (ou d’autres semblables) aura des fonctions qui le feront pour vous; juste Google autour pour convertir en millisecondes.

Si vous souhaitez encoder sémantiquement l'année, le mois et le jour, vous pouvez le faire en multipliant ces composants par des valeurs d'ordre de grandeur suffisantes pour les juxtaposer dans les chiffres entiers:

2012-06-13 -> 20120613 = 10 000 * (2012) + 100 * (6) + 1 * (13)

def to_integer(dt_time):
    return 10000*dt_time.year + 100*dt_time.month + dt_time.day

Par exemple.

In [1]: import datetime

In [2]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:def to_integer(dt_time):
:    return 10000*dt_time.year + 100*dt_time.month + dt_time.day
:    # Or take the appropriate chars from a string date representation.
:--

In [3]: to_integer(datetime.date(2012, 6, 13))
Out[3]: 20120613

Si vous souhaitez également des minutes et des secondes, indiquez simplement les ordres de grandeur supplémentaires nécessaires pour afficher les chiffres.

J'ai souvent rencontré cette seconde méthode dans des systèmes hérités, en particulier des systèmes qui extraient des données basées sur la date de bases de données SQL héritées.

C'est très mauvais. Vous finissez par écrire beaucoup de code hacky pour aligner les dates, calculer les décalages de mois ou de jours tels qu’ils apparaissent au format entier (par exemple, ramener le mois à 1 lorsque vous passez décembre, puis incrémenter la valeur de l’année), convertir vers et à partir du format entier partout.

Si une telle convention ne figure pas dans une section de l’API sur laquelle vous travaillez, qui a été testée de manière approfondie, de bas niveau et minutieusement testée, de sorte que tout utilisateur de données puisse réellement compter sur cette représentation entière et toutes ses fonctions d’aide. beaucoup de gens réécrivent partout les routines de base de traitement des dates.

Il est généralement préférable de laisser la valeur dans un contexte de date, tel que datetime.date, aussi longtemps que vous le pouvez, afin que les opérations effectuées soient exprimées dans un contexte naturel, basé sur la date, et non dans le piratage personnel d'un développeur isolé. entier.

9
ely

Je pense avoir un raccourci pour ça:

# Importing datetime.
from datetime import datetime

# Creating a datetime object so we can test.
a = datetime.now()

# Converting a to string in the desired format (YYYYMMDD) using strftime
# and then to int.
a = int(a.strftime('%Y%m%d'))
0
Chicrala