257 votes

En Python, comment convertir un objet `datetime` en secondes ?

Excusez cette question simple... Je suis nouveau en Python... J'ai cherché un peu partout et rien ne semble fonctionner.

J'ai un groupe d'objets datetime et je veux calculer le nombre de secondes depuis un moment fixe dans le passé pour chacun d'eux (par exemple depuis le 1er janvier 1970).

import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)

Il semble que cela ne différencie que les dates qui ont des jours différents :

t.toordinal()

Toute aide est la bienvenue.

0 votes

2 votes

Je convertirais probablement les deux en S depuis l'époque et je partirais de là : int(t.timestamp())

0 votes

14voto

Michael Points 574

De la documentation sur python :

timedelta.total_seconds()

Renvoie le nombre total de secondes contenues dans la durée. Équivalent à

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6

calculée avec la division réelle activée.

Notez que pour les très grands intervalles de temps (supérieurs à 270 ans sur la plupart des plates-formes), cette méthode perd en précision à la microseconde.

Cette fonctionnalité est nouvelle dans la version 2.7.

1 votes

Il y a un petit problème avec le calcul il doit être 10 6 au lieu de 10*6 ... td.microsecondes + (td.secondes + td.jours * 24 * 3600) * 10 6) / 10**6

0 votes

@sdu belle prise - le double astérisque est dans ma réponse mais stackoverflow le consomme, les tentatives de rectification ne font qu'emboliser le texte.

2voto

J.F. Sebastian Points 102961

Pour convertir un objet datetime qui représente le temps en UTC en timestamp POSIX :

from datetime import timezone

seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()

Pour convertir un objet datetime qui représente le temps dans le fuseau horaire local en timestamp POSIX :

import tzlocal # $ pip install tzlocal

local_timezone = tzlocal.get_localzone()
seconds_since_epoch = local_timezone.localize(local_time, is_dst=None).timestamp()

Véase Comment convertir l'heure locale en UTC en Python ? Si la base de données tz est disponible sur une plateforme donnée ; une solution uniquement stdlib peut fonctionner .

Suivez les liens si vous avez besoin de solutions pour <3.3 Versions de Python.

1voto

Shaohong Li Points 26

J'ai essayé la bibliothèque standard calendrier.horaire et cela fonctionne très bien :

# convert a datetime to milliseconds since Epoch
def datetime_to_utc_milliseconds(aDateTime):
    return int(calendar.timegm(aDateTime.timetuple())*1000)

Réf : https://docs.python.org/2/library/calendar.html#calendar.timegm

0voto

Yash chitroda Points 1

Python fournit une opération sur les dates pour calculer la différence entre deux dates. Dans votre cas, ce serait :

t - datetime.datetime(1970,1,1)

La valeur retournée est un objet timedelta à partir duquel vous pouvez utiliser la fonction membre total_secondes pour obtenir la valeur en secondes.

(t - datetime.datetime(1970,1,1)).total_seconds()

0voto

Faisal Amin Points 89
import datetime
import math

def getSeconds(inputDate):
    time = datetime.date.today().strftime('%m/%d/%Y')
    date_time = datetime.datetime.strptime(time, '%m/%d/%Y')
    msg = inputDate
    props = msg.split(".")
    a_timedelta = datetime.timedelta
    if(len(props)==3):
        a_timedelta = date_time - datetime.datetime(int(props[0]),int(props[1]),int(props[2]))
    else:
        print("Invalid date format")
        return
    seconds = math.trunc(a_timedelta.total_seconds())
    print(seconds)
    return seconds

Exemple getSeconds("2022.1.1")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X