@ Хастер, да. Второе число представляет количество секунд, прошедших между началом эпохи Unix и указанной датой. Этот формат также упоминается как время POSIX.
эикономега
Ответы:
320
>>>import time
>>>import datetime
>>> s ="01/12/2011">>> time.mktime(datetime.datetime.strptime(s,"%d/%m/%Y").timetuple())1322697600.0
@timdiels: снова. .timestamp()предполагает местное время вместо UTC, если не указан явный часовой пояс. Код в ответе работает (выдает ожидаемый результат 1322697600) только на компьютере, где местный часовой пояс имеет нулевое смещение utc.
Jfs
7
это не работает: datetime.datetime.strptime («2014: 06: 28 11:53:21», «% Y:% m:% d% H:% M:% S»). timestamp () Traceback ( последний вызов был последним): файл "<stdin>", строка 1, в <module> AttributeError: у объекта 'datetime.datetime' нет атрибута 'timestamp'
Когда я запускаю примеры в этой должности, я получаю ошибку: NameError: name 'wckCalendar' is not defined. Я использую Python 3.4.1 на 32-битной машине с Windows. Любая идея? Спасибо.
sedeh
1
@sedeh в посте нет wckCalendar. Проверьте свой код.
JFS
@JFSebastian Точно, и я не пытался вызвать wckCalendar напрямую. Это просто появляется в сообщении об ошибке. Смотрите мой пост здесь, обсуждая проблему.
sedeh
1
@ törzsmókus: Если ответ неправильный, не имеет значения, насколько он читаем.
JFS
1
@ törzsmókus: посмотрите на мой ответ: он может дать два разных числа. Ваш ответ дает одно число, не упоминая, какое.
Ответ зависит также от введенной вами даты и часового пояса. Если ваша дата является локальной, то вы можете использовать mktime (), как сказал katrielalex - только я не понимаю, почему он использовал datetime вместо этой более короткой версии:
Но обратите внимание, что мой результат отличается от его, так как я, вероятно, нахожусь в другом TZ (и результат - метка времени UNIX без часового пояса)
Теперь, если введенная дата уже в UTC, то я считаю, что правильное решение:
Многие из этих ответов не удосуживаются считать, что дата наивна с самого начала
Чтобы быть точным, вам нужно сначала сделать наивную дату осведомленной о часовом поясе
import datetime
import pytz
# naive datetime
d = datetime.datetime.strptime('01/12/2011','%d/%m/%Y')>>> datetime.datetime(2011,12,1,0,0)# add proper timezone
pst = pytz.timezone('America/Los_Angeles')
d = pst.localize(d)>>> datetime.datetime(2011,12,1,0,0,
tzinfo=<DstTzInfo'America/Los_Angeles' PST-1 day,16:00:00 STD>)# convert to UTC timezone
utc = pytz.UTC
d = d.astimezone(utc)>>> datetime.datetime(2011,12,1,8,0, tzinfo=<UTC>)# epoch is the beginning of time in the UTC timestamp world
epoch = datetime.datetime(1970,1,1,0,0,0,tzinfo=pytz.UTC)>>> datetime.datetime(1970,1,1,0,0, tzinfo=<UTC>)# get the total second difference
ts =(d - epoch).total_seconds()>>>1322726400.0
# Don't do this:
d = datetime.datetime(2011,12,1,0,0,0, tzinfo=pytz.timezone('America/Los_Angeles'))>>> datetime.datetime(2011,1,12,0,0,
tzinfo=<DstTzInfo'America/Los_Angeles' LMT-1 day,16:07:00 STD>)# tzinfo in not PST but LMT here, with a 7min offset !!!# when converting to UTC:
d = d.astimezone(pytz.UTC)>>> datetime.datetime(2011,1,12,7,53, tzinfo=<UTC>)# you end up with an offset
Что за datetimeфункция? datetimeиз datetimeбиблиотеки не поддерживает.timestamp()
Joooeey
@Joooeey: Да , на Python 3.3 или новее . Не был доступен, когда вопрос был опубликован, но он был доступен с сентября 2012 года.
ShadowRanger
0
просто используйте datetime.timestamp (ваш экземпляр datetime), экземпляр datetime содержит информацию о часовом поясе, поэтому отметка времени будет стандартной отметкой времени utc. если вы преобразуете дату и время в timetuple, он потеряет свой часовой пояс, поэтому результатом будет ошибка. если вы хотите предоставить интерфейс, вы должны написать так: int (datetime.timestamp (time_instance)) * 1000
Вы можете использовать эту ссылку для использования strptimeфункции from datetime.datetimeдля преобразования даты из любого формата вместе с часовым поясом.
my_date ='2020/08/08'
my_date = my_date.replace('/','-')# just to adapte to your question
date_timestamp = datetime.datetime.fromisoformat(my_date).timestamp()
Ответы:
источник
calendar.timegm()
или.toordinal()
datetime.datetime.strptime(s, "%d/%m/%Y").timestamp()
немного короче.timestamp()
предполагает местное время вместо UTC, если не указан явный часовой пояс. Код в ответе работает (выдает ожидаемый результат1322697600
) только на компьютере, где местный часовой пояс имеет нулевое смещение utc.Я использую
ciso8601
, что в 62 раза быстрее, чем strptime для datetime.Вы можете узнать больше здесь .
источник
Чтобы преобразовать строку в объект даты:
Способ преобразования объекта даты в метку времени POSIX зависит от часового пояса. От преобразования
datetime.date
в метку времени UTC в Python :объект даты представляет полночь в UTC
объект date представляет полночь по местному времени
Временные метки различаются, если только полночь в UTC и местное время не совпадают с экземпляром времени.
источник
NameError: name 'wckCalendar' is not defined
. Я использую Python 3.4.1 на 32-битной машине с Windows. Любая идея? Спасибо.источник
"%s"
не поддерживается Python . Это не портативный.Ответ зависит также от введенной вами даты и часового пояса. Если ваша дата является локальной, то вы можете использовать mktime (), как сказал katrielalex - только я не понимаю, почему он использовал datetime вместо этой более короткой версии:
Но обратите внимание, что мой результат отличается от его, так как я, вероятно, нахожусь в другом TZ (и результат - метка времени UNIX без часового пояса)
Теперь, если введенная дата уже в UTC, то я считаю, что правильное решение:
источник
Просто используйте
datetime.datetime.strptime
:Результат:
Чтобы использовать UTC вместо местного часового пояса, используйте
.replace
:источник
float
неint
Сначала вы должны класс strptime, чтобы преобразовать строку в формат struct_time.
Тогда просто используйте mktime, чтобы получить ваш float.
источник
Многие из этих ответов не удосуживаются считать, что дата наивна с самого начала
Чтобы быть точным, вам нужно сначала сделать наивную дату осведомленной о часовом поясе
Также:
Будьте осторожны, используя
pytz
дляtzinfo
вdatetime.datetime
работы не для многих часовых поясов. Смотрите дату и время с часовым поясом. Различное смещение в зависимости от того, как установлена tzinfohttps://en.wikipedia.org/wiki/Local_mean_time
источник
Я бы предложил dateutil :
источник
"%d/%m/%Y"
формате. Сравните:dateutil.parser.parse("01/02/2001")
аdatetime.strptime("01/02/2001", "%d/%m/%Y")
1322697600
если ваш местный часовой пояс не UTC. Смотрите мой комментарий от 2014 годаКажется довольно эффективным:
1,61 мкс ± 120 нс на цикл (среднее ± стандартное отклонение из 7 циклов, 100000 циклов в каждом)
источник
datetime
функция?datetime
изdatetime
библиотеки не поддерживает.timestamp()
просто используйте datetime.timestamp (ваш экземпляр datetime), экземпляр datetime содержит информацию о часовом поясе, поэтому отметка времени будет стандартной отметкой времени utc. если вы преобразуете дату и время в timetuple, он потеряет свой часовой пояс, поэтому результатом будет ошибка. если вы хотите предоставить интерфейс, вы должны написать так: int (datetime.timestamp (time_instance)) * 1000
источник
Вы можете использовать эту ссылку для использования
strptime
функции fromdatetime.datetime
для преобразования даты из любого формата вместе с часовым поясом.https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
источник
Вы можете преобразовать в изоформ
источник
Простая функция для получения времени UNIX Epoch.
ПРИМЕЧАНИЕ . Эта функция предполагает, что введенное время даты указано в формате UTC (см. Комментарии здесь).
Использование :
источник