sql >> Databasteknik >  >> RDS >> Mysql

Konvertering av Python DateTime-sträng till heltals millisekunder

[Redigerad efter förslag i kommentarerna]

Använder Ben Alperts svar på Hur kan jag konvertera ett datetime-objekt till millisekunder sedan epok (unixtid) i Python vi kan göra följande:

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)

returnerar:

1435371005653

vilket motsvarar:lör, 27 juni 2015 02:10:05 GMT (som förväntat)

Vi kan också använda datetimes .strftime('%s') för att få unix-tid, till och med millisekunder med följande (men detta rekommenderas inte ):

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)

returnerar:

1435396205653

motsvarande:lör, 27 juni 2015 09:10:05 GMT (på min mac i San Diego; Obs :detta är 7 timmar ledigt vad vi kan ha förväntat oss).

Orsaken till felet beskrivs av J.F. Sebastian i kommentarerna till länken ovan och i detta svar angående .strftime('%s') beteende. J.F. Sebastian påpekar att "det stöds inte, det är inte portabelt, det kan i tysthet producera ett felaktigt resultat för ett medvetet datetime-objekt, det misslyckas om inmatningen är i UTC (som i frågan) men den lokala tidszonen är inte UTC"



  1. Infoga värdelistan matchar inte kolumnlistan:1136 Kolumnantal matchar inte värdeantal

  2. Hur man undviker att använda + i versionsnummer med SQLiteAssetHelper

  3. SQL Server delar upp CSV i flera rader

  4. Räkna antalet unika värden