semana - subtrair horas python




Como obter a hora atual em Python (20)

Qual é o módulo / método usado para obter a hora atual?


Como faço para obter a hora atual em Python?

O módulo de time

O módulo de time fornece funções que nos informa a hora em "segundos desde a época", bem como outros utilitários.

import time

Unix Epoch Time

Este é o formato em que você deve obter registros de data e hora para salvar em bancos de dados. É um número simples de ponto flutuante que pode ser convertido em um inteiro. Também é bom para a aritmética em segundos, pois representa o número de segundos desde 1º de janeiro de 1970, 00:00:00, e é a luz de memória relativa às outras representações de tempo que veremos a seguir:

>>> time.time()
1424233311.771502

Esse registro de data e hora não leva em conta os segundos-pico, portanto, não é linear - segundos saltantes são ignorados. Portanto, embora não seja equivalente ao padrão internacional UTC, ele é próximo e, portanto, muito bom para a maioria dos casos de manutenção de registros.

Isso não é ideal para agendamento humano, no entanto. Se você tiver um evento futuro que deseja realizar em um determinado momento, será necessário armazenar esse horário com uma cadeia de caracteres que possa ser analisada em um objeto de data e hora ou em um objeto de data e hora serializado (estes serão descritos posteriormente).

time.ctime

Você também pode representar a hora atual da maneira preferida pelo seu sistema operacional (o que significa que ela pode mudar quando você altera as preferências do sistema, portanto, não confie nisto para ser padrão em todos os sistemas, como eu já vi outros esperarem) . Isso é tipicamente amigável, mas normalmente não resulta em seqüências de caracteres que podem ser classificadas cronologicamente:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

Você pode hidratar os timestamps em formato legível com o ctime também:

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

Esta conversão também não é boa para manutenção de registros (exceto em textos que serão apenas analisados ​​por humanos - e com melhor Reconhecimento Óptico de Caracteres e Inteligência Artificial, eu acho que o número desses casos diminuirá).

módulo datetime

O módulo datetime também é bastante útil aqui:

>>> import datetime

datetime.datetime.now

O datetime.now é um método de classe que retorna o horário atual. Ele usa o time.localtime sem as informações do fuso horário (se não for fornecido, caso contrário, consulte o fuso horário abaixo). Ele tem uma representação (que permite recriar um objeto equivalente) ecoado no shell, mas quando impresso (ou forçado a um str ), ele é em formato legível (e quase ISO), e o tipo lexicográfico é equivalente a o tipo cronológico:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

datetime de utcnow

Você pode obter um objeto de data e hora na hora UTC, um padrão global, fazendo isso:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

O UTC é um padrão de tempo quase equivalente ao fuso horário GMT. (Embora o GMT e o UTC não mudem para o horário de verão, os usuários podem alternar para outros fusos horários, como o horário de verão britânico, durante o verão.)

fuso horário datetime cientes

No entanto, nenhum dos objetos datetime que criamos até agora pode ser facilmente convertido em vários fusos horários. Podemos resolver esse problema com o módulo pytz :

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

Equivalentemente, no Python 3 temos a classe timezone com uma instância de timezone utc anexada, que também torna o objeto timezone ciente (mas para converter em outro timezone sem o prático módulo pytz é deixado como um exercício para o leitor):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

E vemos que podemos converter facilmente para fusos horários do objeto utc original.

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

Você também pode tornar um objeto datetime ingênuo ciente do pytz timezone localize do pytz ou substituir o atributo tzinfo (com replace , isso é feito às cegas), mas esses são os últimos recursos que as melhores práticas:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

O módulo pytz nos permite conscientizar o fuso horário dos objetos datetime e converter os tempos em centenas de fusos horários disponíveis no módulo pytz .

Podíamos ostensivamente serializar esse objeto para a hora UTC e armazená- lo em um banco de dados, mas isso exigiria muito mais memória e seria mais propenso a erros do que simplesmente armazenar o horário Unix Epoch, o que demonstrei primeiro.

As outras formas de visualizar os tempos são muito mais propensas a erros, especialmente ao lidar com dados que podem vir de diferentes fusos horários. Você deseja que não haja confusão quanto ao fuso horário para o qual um objeto de data e hora serializado foi destinado.

Se você está exibindo o tempo com o Python para o usuário, o ctime funciona bem, não em uma tabela (normalmente não classifica bem), mas talvez em um relógio. No entanto, eu pessoalmente recomendo, ao lidar com o tempo em Python, usando o tempo do Unix ou um objeto de datetime UTC ciente do fuso horário.


A maneira mais rápida é

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'

Eu quero ter o tempo com milissegundos. Uma maneira simples de obtê-los:

import time, datetime

print(datetime.datetime.now().time())                         # 11:20:08.272239

# Or in a more complicated way
print(datetime.datetime.now().time().isoformat())             # 11:20:08.272239
print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239

# But do not use this:
print(time.strftime("%H:%M:%S.%f", time.localtime()), str)    # 11:20:08.%f

Mas eu quero apenas milissegundos , certo? O caminho mais curto para obtê-los:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

Adicione ou remova os zeros da última multiplicação para ajustar o número de pontos decimais, ou apenas:

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)

Experimente o módulo de seta em http://crsmithdev.com/arrow/ :

import arrow
arrow.now()

Ou a versão do UTC:

arrow.utcnow()

Para alterar sua saída, adicione .format ():

arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')

Para um fuso horário específico:

arrow.now('US/Pacific')

Uma hora atrás:

arrow.utcnow().replace(hours=-1)

Ou se você quiser a essência.

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'

Foi com isso que acabei indo:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

Além disso, essa tabela é uma referência necessária para escolher os códigos de formato apropriados para obter a data formatada do jeito que você deseja (da documentação "datetime" do Python here ).


O seguinte é o que eu uso para obter o tempo sem ter que formatar. Algumas pessoas não gostam do método split, mas é útil aqui:

from time import ctime
print ctime().split()[3]

Ele será impresso no formato HH: MM: SS.


Por que não perguntar ao Observatório Naval dos EUA , o cronometrista oficial da Marinha dos Estados Unidos?

import requests
from lxml import html

page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)
print(tree.xpath('//html//body//h3//pre/text()')[1])

Se você mora na área de DC (como eu) a latência pode não ser tão ruim ...


Primeiro importe o módulo datetime do datetime

from datetime import datetime

Em seguida, imprima a hora atual como 'aaaa-mm-dd hh: mm: ss'

print(str(datetime.now())

Para obter apenas o tempo no formato 'hh: mm: ss', em que ss representa o número total de segundos mais a fração de segundos decorridos, apenas faça;

print(str(datetime.now()[11:])

Converter o datetime.now () em uma string produz uma resposta que está no formato que se parece com as DATAS E HORAS regulares a que estamos acostumados.


Se você precisar da hora atual como um objeto de time :

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)

Se você quer apenas o registro de data e hora atual em ms (por exemplo, para medir o tempo de execução), você também pode usar o módulo "timeit":

import timeit
start_time = timeit.default_timer()
do_stuff_you_want_to_measure()
end_time = timeit.default_timer()
print("Elapsed time: {}".format(end_time - start_time))

Simples e fácil:

Usando o módulo datetime ,

import datetime
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

Saída:

2017-10-17 23:48:55

OU

Usando o time ,

import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))

Saída:

2017-10-17 18:22:26

Todas boas sugestões, mas acho mais fácil usar o ctime() :

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

Isso fornece uma representação de string bem formatada da hora local atual.


Usar:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

E apenas o tempo:

>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.now().time())
09:17:51.914526

Veja a documentação para mais informações.

Para salvar a digitação, você pode importar o objeto datetime módulo datetime :

>>> from datetime import datetime

Em seguida, remova o datetime. principal datetime. de todos os itens acima.


Você pode usar time.strftime() :

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'

Você pode usar o módulo de time .

import time
print time.strftime("%d/%m/%Y")

>>> 06/02/2015

O uso do capital Y dá o ano inteiro, e usando y daria 06/02/15 .

Você também pode usar para dar um tempo mais longo.

time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'

.isoformat() está na documentação, mas ainda não está aqui (isso é muito semelhante à resposta do @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

>>> from datetime import datetime
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')

Para este exemplo, a saída será assim: '2013-09-18 11:16:32'

Aqui está a lista de strftime .


>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

Isso gera o GMT atual no formato especificado. Existe também um método localtime ().

Esta page tem mais detalhes.


from time import ctime

// Day {Mon,Tue,..}
print ctime().split()[0]
// Month {Jan, Feb,..}
print ctime().split()[1]
// Date {1,2,..}
print ctime().split()[2]
// HH:MM:SS
print ctime().split()[3]
// Year {2018,..}
print ctime().split()[4]

Quando você chama ctime (), ele converte segundos em string no formato 'Dia Mês Data HH: MM: Ano SS' (por exemplo: 'Qua 17 de janeiro 16:53:22 2018'), então você chama o método split () fará uma lista a partir de sua string ['Wed', 'Jan', '17', '16:56:45', '2018'] (o delimetro padrão é space).

Os colchetes são usados ​​para 'selecionar' o argumento desejado na lista.

Deve-se chamar apenas uma linha de código. Não se deve chamá-los como eu fiz, isso foi apenas um exemplo, porque em alguns casos você terá valores diferentes, casos raros, mas não impossíveis.


import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond

Do dir(date) ou qualquer variável, incluindo o pacote. Você pode obter todos os atributos e métodos associados à variável.





time