Diferença entre módulos de data e hora do Python versus hora


136

Eu estou tentando descobrir as diferenças entre o datetimee timemódulos, e que cada um deve ser usado para.

Eu sei que datetimefornece datas e horas. Qual é a utilidade do timemódulo?

Os exemplos seriam apreciados e as diferenças em relação aos fusos horários seriam especialmente interessantes.

Respostas:


101

o timemódulo é principalmente para trabalhar com carimbos de data e hora unix; expresso como um número de ponto flutuante considerado em segundos desde a época do unix. o datetimemódulo pode suportar muitas das mesmas operações, mas fornece um conjunto de tipos mais orientado a objetos e também possui suporte limitado para fusos horários.


22
Além disso, quais são as diferenças entre timee datetime.time?
SparkAndShine

Seria bom detalhar propriedades como se fosse em tempo real / monotônico. Como no padrão POSIX você tem: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD, etc ... relógios Em POSIX ver: stackoverflow.com/questions/3523442/...
Vajk Hermecz

11

Atenha-se timepara evitar a ambiguidade do horário de verão.

Use exclusivamente o timemódulo do sistema em vez do datetimemódulo para evitar problemas de ambiguidade com horário de verão (DST) .

A conversão para qualquer formato de hora, incluindo a hora local, é bastante fácil:

import time
t = time.time()

time.strftime('%Y-%m-%d %H:%M %Z', time.localtime(t))
'2019-05-27 12:03 CEST'

time.strftime('%Y-%m-%d %H:%M %Z', time.gmtime(t))
'2019-05-27 10:03 GMT'

time.time()é um número de ponto flutuante que representa o tempo em segundos desde a época do sistema. time.time()é ideal para estampagem de tempo inequívoca.

Se o sistema executar adicionalmente o daemon de protocolo de tempo de rede (NTP) , um terminará com uma base de tempo bastante sólida.

Aqui está a documentação do timemódulo.


No seu exemplo, você usa o time.localtime()que, obviamente, possui o horário de verão. Se formos puristas, não deveríamos usá-lo time.gmtime()? :)
Seamus

@Seamus Simplesmente testando ambos os comandos em ipythonprogramas que time.gmtime()produzem uma tupla, enquanto time.time()fornece ao tempo da época UNIX um único valor decimal de segundos decorridos desde 00:00:00 UTC, quinta-feira, 1 de janeiro de 1970. A função time.localtime(t)converte o tempo da época em um local tupla de tempo. Portanto, a resposta para sua pergunta é «não».
Serge Stroobandt

Existe uma maneira de adicionar dias a um objeto de tempo? com datetime existe o método timedelta (days = 6).
Nehemias Herrera

@NehemiasHerrera t = time.time()é um número de ponto flutuante que representa o tempo em segundos desde a época do sistema. Portanto, pode-se simplesmente adicionar ou subtrair 86400 segundos para todos os dias; t += 86400
Serge Stroobandt

5

O módulo de hora pode ser usado quando você só precisa da hora de um registro específico - como digamos que você tenha uma tabela / arquivo separado para as transações de cada dia, então você precisaria apenas da hora. No entanto, o tipo de dados de hora é geralmente usado para armazenar a diferença de hora entre 2 pontos de tempo.

Isso também pode ser feito usando datetime, mas se estamos lidando apenas com o horário de um dia específico, o módulo de horário pode ser usado.

Datetime é usado para armazenar dados e horas específicos para um registro. Como em uma agência de aluguel. A data de vencimento seria um tipo de dados datetime.


3

Se você está interessado em fusos horários, considere o uso de pytz.


8
parece que ele está mais interessado nos módulos de hora e data e hora e nas diferenças de fuso horário entre eles. com todo o respeito, trazer outra dependência para isso é praticamente irrelevante.
precisa saber é o seguinte

3
O suporte a fusos horários nos módulos de hora e data e hora é realmente muito ruim ... se ele estiver realmente interessado em lidar com fusos horários de uma maneira útil, então ele realmente deve saber sobre pytz. Você trazer dependências para resolver a questão de que suas dependências atuais não estão ajudando a resolver o seu problema ...
donkopotamus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.