Dove sono finiti i millisecondi andare?
È la parte facile. La chiamata .timetuple()
li fa cadere. Puoi aggiungerli di nuovo usando l'attributo .microsecond
. Il datetime.timestamp()
method from the standard library funziona in questo modo per gli oggetti datetime ingenui:
def timestamp(self):
"Return POSIX timestamp as float"
if self._tzinfo is None:
return _time.mktime((self.year, self.month, self.day,
self.hour, self.minute, self.second,
-1, -1, -1)) + self.microsecond/1e6
else:
return (self - _EPOCH).total_seconds()
E 'sufficiente, se possibile, ~ 1 ora errori potevano essere ignorati nel tuo caso. Suppongo che tu voglia dei microsecondi e quindi non puoi ignorare silenziosamente gli errori di un'ora circa.
Per convertire correttamente l'ora locale fornita come stringa in POSIX in modo corretto, è un'operazione complessa in generale. È possibile convertire l'ora locale in UTC e quindi get the timestamp from UTC time.
Ci sono due questioni principali:
Entrambi possono essere risolti utilizzando il database tz (pytz
modulo in Python) :
from datetime import datetime
import pytz # $ pip install pytz
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone() # get pytz timezone corresponding to the local timezone
naive_d = datetime.strptime(myDate, "%Y-%m-%d %H:%M:%S,%f")
# a) raise exception for non-existent or ambiguous times
d = tz.localize(naive_d, is_dst=None)
## b) assume standard time, adjust non-existent times
#d = tz.normalize(tz.localize(naive_d, is_dst=False))
## c) assume DST is in effect, adjust non-existent times
#d = tz.normalize(tz.localize(naive_d, is_dst=True))
timestamp = d - datetime(1970, 1, 1, tzinfo=pytz.utc)
Il risultato è timestamp
- un oggetto timedelta
, è possibile convertirlo in secondi, millisecondi, ecc
anche diversi sys i valori possono comportarsi in modo diverso intorno/durante i secondi bisestili. La maggior parte delle applicazioni può ignorare che esistono.
In generale, potrebbe essere più semplice memorizzare i timestamp POSIX in aggiunta a all'ora locale invece di provare a indovinarlo dall'ora locale.
la data di inserimento (2014-08-01) non corrisponde al timestamp (2014-09-15 02: 30: 01.117Z) – jfs