Preciso criar um valor "Expira" daqui a 5 minutos, mas preciso fornecê-lo no formato UNIX Timestamp. Eu tenho isso até agora, mas parece um hack.
def expires():
'''return a UNIX style timestamp representing 5 minutes from now'''
epoch = datetime.datetime(1970, 1, 1)
seconds_in_a_day = 60 * 60 * 24
five_minutes = datetime.timedelta(seconds=5*60)
five_minutes_from_now = datetime.datetime.now() + five_minutes
since_epoch = five_minutes_from_now - epoch
return since_epoch.days * seconds_in_a_day + since_epoch.seconds
Existe um módulo ou função que faça a conversão de carimbo de data e hora para mim?
python
datetime
unix-timestamp
Daniel Rhoden
fonte
fonte
Respostas:
Outra maneira é usar
calendar.timegm
:Também é mais portátil do que
%s
sinalizarstrftime
(o que não funciona no Windows).fonte
calendar.timegm(future.utctimetuple())
. Isso garante que a hora UTC seja passadacalendar.timegm
.21600.0
segundos (6 horas) em vez de 0,0 para TZ da minha máquina unixcalendar.timegm(datetime.datetime.utcnow().timetuple())
. O método usandodatetime.datetime.now().utctimetuple()
não funciona para mim (Python 3.2).Agora, em Python> = 3.3, você pode chamar o método timestamp () para obter o timestamp como um float.
fonte
datetime.now()
) é ruim porque incentiva o uso de objetos de data / hora ingênuos que representam a hora local e pode falhar durante as transições de horário de verão (devido à ambiguidade inerente). Você poderia usar em seuts = datetime.now(timezone.utc).timestamp()
lugar.utcnow()
. Estou acostumado a trabalhar em máquinas em que o fuso horário está definido como UTC, mas isso não deve ser assumido neste trecho de código.Acabei de encontrar isso, e é ainda mais curto.
fonte
time.time()
pode ser recuado. Para criar um valor "Expira" daqui a 5 minutos, pode ser necessáriotime.monotonic()
analógico, dependendo do seu caso de uso.monotonic
possibilidade de utilização depende do seu caso de uso, por exemplo, osubprocess
módulo o utiliza para implementar atimeout
opção.Isto é o que você precisa:
fonte
mktime(dt.timetuple())
.datetime.now(timezone.utc).timestamp()
fornecido por @Tim Tisdall é a solução em Python 3.3+. Caso contrário,(dt - epoch).total_seconds()
poderia ser usado .Você pode usar
datetime.strftime
para obter o horário no formato Época, usando a%s
sequência de formato:Nota: Isso funciona apenas no linux, e esse método não funciona com fusos horários.
fonte
ValueError: Invalid format string
).Aqui está uma
datetime
solução menos quebrada para converter do objeto datetime para o carimbo de data / hora posix:Veja mais detalhes em Convertendo datetime.date para carimbo de data e hora UTC em Python .
fonte
fonte
A chave é garantir que todas as datas que você está usando estejam no fuso horário utc antes de iniciar a conversão. Veja http://pytz.sourceforge.net/ para saber como fazer isso corretamente. Ao normalizar para utc, você elimina a ambiguidade das transições de horário de verão. Em seguida, você pode usar com segurança o timedelta para calcular a distância da época unix e depois converter para segundos ou milissegundos.
Observe que o registro de data e hora unix resultante é o próprio fuso horário UTC. Se você deseja ver o registro de data e hora em um fuso horário localizado, precisará fazer outra conversão.
Observe também que isso funcionará apenas para datas posteriores a 1970.
fonte
1970-01-01 00:00:00+00:00
). Para obter um objeto datetime ingênuo no fuso horário local:datetime.fromtimestamp(ts)
O seguinte é baseado nas respostas acima (mais uma correção para os milissegundos) e emula
datetime.timestamp()
para o Python 3 antes do 3.3 quando os fusos horários são usados.Para responder estritamente à pergunta, faça o seguinte:
datetime_timestamp
faz parte da data simples . Mas se você estivesse usando esse pacote, provavelmente digitaria:que lida com muitos outros formatos / tipos para my_datetime.
fonte
fonte
Observe que as soluções com
timedelta.total_seconds()
trabalho em python-2.7 +. Usecalendar.timegm(future.utctimetuple())
para versões inferiores do Python.fonte