Mysql
 sql >> Database >  >> RDS >> Mysql

Conversione della stringa Python DateTime in millisecondi interi

[Modificato in seguito al suggerimento nei commenti]

Utilizzando Ben Alpert risposta a Come posso convertire un oggetto datetime in millisecondi da epoch (unix time) in Python possiamo fare quanto segue:

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)

resi:

1435371005653

che equivale a:Sab, 27 Jun 2015 02:10:05 GMT (come previsto)

Possiamo anche usare .strftime('%s') di datetime per ottenere unix time, anche millisecondi, utilizzando quanto segue (ma ​​non è consigliato ):

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)

resi:

1435396205653

equivalente a:Sab, 27 Jun 2015 09:10:05 GMT (sul mio Mac a San Diego; Nota :sono 7 ore di sconto rispetto a quanto ci aspettavamo).

La causa dell'errore è descritta da J.F. Sebastian nei commenti del link sopra e in questo risposta relativa a .strftime('%s') comportamento. J.F. Sebastian sottolinea che "non è supportato, non è portatile, potrebbe produrre silenziosamente un risultato errato per un oggetto datetime consapevole, fallisce se l'input è in UTC (come nella domanda) ma il fuso orario locale non è UTC"