Конвертировать время в EpochSecond - PullRequest
0 голосов
/ 16 ноября 2018

Я новичок в питоне.В настоящее время у меня есть такие временные данные, как «2018-11-15 13: 34: 40.000 EST».Я хочу преобразовать это в EpochSecond.

Я знаю, как использовать dateparser, но я хочу знать, есть ли простой способ сделать это без dateparser?

import dateparser
from datetime import datetime, timezone

mytime = "2018-11-15 13:34:40.000 EST"

dateVar = dateparser.parse(mytime)

print(dateVar)

epoch = datetime(1970, 1, 1,  tzinfo=timezone.utc)

print((dateVar - epoch).total_seconds()) 

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

datetime.datetime.timestamp() - это то, что вы ищете (соответствующая часть):

Для осведомленных экземпляров даты и времени возвращаемое значение вычисляется как:

(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()

Пример:

import datetime

now = datetime.datetime.now()
epoch = now.timestamp()

# 1542394106.155199

Реализовано в вашем примере, мы должны будем использовать другой подход, поскольку datetime.datetime.strptime() невполне примите во внимание часовой пояс из-за ошибки ( соответствующий вопрос , где я нашел информацию).Таким образом, нам придется использовать другую встроенную функцию для его анализа ( пример здесь ):

from dateutil.parser import parse

mytime = "2018-11-12 00:30:20.000 EST"
dt = parse(mytime)
epoch = dt.timestamp()

Анализируемая строка по-прежнему является datetime.datetime объектом, поэтому вы можете обработать ее после

Примечание: однако parse может жаловаться на то, что читает часовой пояс, но не понимает его:

 UnknownTimezoneWarning: tzname EDT identified but not understood.  Pass `tzinfos` argument in order to correctly return a timezone-aware datetime.  In a future version, this will raise an exception.

Возможно, вам потребуется passtzinfos в parse() метод в любом случае:

from dateutil.parser import parse
# from dateutil.tz import gettz # <-- can use if you know the tz to retrieve

tzinfos = {'EST': -18000, 'CET': +3600}
# another example: {"CST": gettz("America/Chicago")}
mytime = "2018-11-12 00:30:20.000 EST"
dt = parse(mytime, tzinfos=tzinfos)
epoch = dt.timestamp()
print(epoch)

Так что я думаю, в конце концов, это не так просто, как вы могли бы хотеть.

0 голосов
/ 16 ноября 2018

Попробуйте:

from datetime import datetime

epoch = datetime.datetime(1970,1,1)
i = datetime.now()

delta_time = (i - epoch).total_seconds()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...