Где миллисекунды идти?
Это легкая деталь. .timetuple()
вызов опускает их. Вы можете добавить их обратно, используя атрибут .microsecond
. datetime.timestamp()
method from the standard library работает таким образом для наивных объектов даты и времени:
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()
Достаточно, если возможно, ~ 1 час ошибки могут быть проигнорированы в вашем случае. Я предполагаю, что вам нужны микросекунды, и поэтому вы не можете игнорировать ошибки в 1 час времени молча.
Чтобы преобразовать локальное время, заданное в качестве строки в метку времени POSIX, является сложной задачей в целом. Вы можете конвертировать местное время в UTC, а затем get the timestamp from UTC time.
Есть два основных вопроса:
- местного времени может быть несуществующим или неоднозначным, например,во время летнего времени переходов может происходить в то же время дважды
- UTC смещения для местного часового пояса может быть различным в прошлом, и поэтому наивный:
local time minus epoch in local time
formula may fail
Оба могут быть решены с использованием базы данных TZ (pytz
модуля в 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)
результат timestamp
- это timedelta
объект, вы можете преобразовать его в секунды, миллисекунды и т.д.
также различного SYS Темпы могут вести себя по-разному вокруг/в течение секунд прыжка. Большинство приложений могут игнорировать то, что они существуют.
В общем, может быть проще хранить временные метки POSIX , а не, а не пытаться угадать его по местному времени.
дата ввода (2014-08-01) не соответствует отметке времени (2014-09-15 02: 30: 01.117Z) – jfs