Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conversion de la chaîne Python DateTime en millisecondes entières

[Modifié suite à la suggestion dans les commentaires]

Utilisation de de Ben Alpert réponse à Comment puis-je convertir un objet datetime en millisecondes depuis l'époque (heure unix) en Python nous pouvons faire ce qui suit :

from datetime import datetime
def unix_time(dt):
    epoch = datetime.utcfromtimestamp(0)
    delta = dt - epoch
    return delta.total_seconds()

def unix_time_millis(dt):
    return int(unix_time(dt) * 1000)

a = datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
unix_time_millis(a)

renvoie :

1435371005653

ce qui équivaut à :Sam, 27 Jun 2015 02:10:05 GMT (comme prévu)

Nous pouvons également utiliser le .strftime('%s') de datetime pour obtenir le temps unix, même des millisecondes en utilisant ce qui suit (mais ce n'est pas conseillé ):

from decimal import Decimal

int(Decimal(datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ").strftime('%s.%f'))*1000)

renvoie :

1435396205653

équivalent à :Sam, 27 Jun 2015 09:10:05 GMT (sur mon mac à San Diego ; Remarque  :c'est 7 heures de moins que ce à quoi nous nous attendions).

La cause de l'erreur est décrite par J.F. Sebastian dans les commentaires du lien ci-dessus et dans ceci réponse concernant .strftime('%s') comportement. JF Sebastian souligne que "il n'est pas pris en charge, il n'est pas portable, il peut produire silencieusement un mauvais résultat pour un objet datetime conscient, il échoue si l'entrée est en UTC (comme dans la question) mais le fuseau horaire local n'est pas UTC "