Módulo time

Teoria Completa

Usando dados de tempo e data em Python

Fala aí, seus doido! Primeiramente, queria te dizer que o módulo tem o nome em inglês (time = tempo). Vamos usa-lo pra (adivinha só?!) pegar dados sobre tempo e data. Então, antes da gente começar a estudar sobre as funções fornecidas pelo módulo, vamos importar no nosso código!

Não esquece que as importações de módulos devem ficar nas primeiras linhas do seu programa, ok?!

Cara, vou te contar uma coisa que você precisa entender mas nem sempre precisa usar. Acontece que todos os computadores sabem quantos segundos se passaram desde 00h de 1 de janeiro de 1970. Tu não precisa lembrar dessa data, ok?! Porém, a ideia é você se ligar que é tudo uma questão de referência. Uma das aplicações legais desse tipo de informação é pra saber o tempo de execução do seu programa.

Esse programa calcula o quadrado de todos os números entre 0 e 2000000 (muita coisa). No fim, será exibido a variável “tempo_decorrido”, que vai estar armazenando o tempo, em segundos, que seu programa demorou pra executar. Então, a primeira função que a gente aprendeu foi a time.time().

Mas e pra usar datas?

Cara, se a gente sabe a quantidade de segundos, então a gente pode converter pra quantidade de dias, meses, anos, etc.. Assim, podemos saber a data em que nós estamos! Mas fazer todas essas conversões é uma tarefa bastante tediosa. No entanto, pra salvar nossas vidas, o módulo trás consigo funções que fazem essas conversões.

Função localtime

A função localtime converte um número de segundos pra um formato legível de data. Olha:

Assim, você consegue obter a data atual de quando o programa está sendo executado. Ao executar esse programa, o resultado foi esse:

Isso porque eu tô escrevendo esse texto no dia 30/11/2019, às 19h13. Talvez você não se lembre dos nomes certinhos de cada informação na estrutura retornada por localtime(), mas você pode descobrir malandramente!

O resultado desse código te mostra o nome de cada uma das propriedades.

Esse é o resultado se você tentar printar o retorno da função time.localtime(). É meio bagunçado, mas dá pra você olhar o nome da propriedade que você quer.

Mas se liga, essa função, quando a gente usa sem nada dentro dos parênteses, retorna a data atual pra gente. Mas também dá pra usar essa função tendo um número específico de segundos.

Dessa vez, nós estamos perguntando os dados da data de 1000000000 corridos desde 1970, ok?!

Isso significa que, desde o início do ano 1970 até o dia 08/09/2001, às 22h46m40s, haviam decorridos 1000000000 segundos.

Função sleep

Cara, essa função faz o seu programa esperar um determinado número de segundos.

Ao executar esse programa, você vai notar que o segundo print vai ser executado 7 segundos após o primeiro.

Cara, essas são as funções que você precisa saber pra mandar bem na sua prova, ok?! Te desejo todo sucesso!

Tô te esperando nos exercícios de fixação, emmmm!

Expandir

Exercício Resolvido #1

Pense Python, Capítulo 5.14, Ex 5.1

O módulo time fornece uma função, também chamada time, que devolve a hora média de Greenwich na “época”, que é um momento arbitrário usado como ponto de referência. Em sistemas UNIX, a época é primeiro de janeiro de 1970.

>>> import time

>>> time.time()

1437746094.5735958

Escreva um script que leia a hora atual e a converta em um tempo em horas, minutos e segundos, mais o número de dias desde a época.

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí, seu doido! Vamos começar importando o módulo time, porque a gente vai precisar dele.

E, em seguida, bora salvar em uma variável o tempo atual utilizando a função time(), que pertence ao módulo time (mesmo nome hahaha).

Agora a gente precisa, a partir dessa variável (que agora tem a quantidade de segundos desde 01/01/1970), dizer quantas horas, minutos e segundos se passaram. Vamos começar extraindo as horas da quantidade total de segundos que a gente tem!

Passo 2

Vamos começar com os minutos. A gente tem o tempo total em segundos, mas a gente tá ligado que a cada 60 segundos, podemos considerar um minuto.

Pronto! Já temos o correspondente em minutos. Mas repara que a gente pegou a divisão inteira (//). Ou seja, não queremos minutos quebrados, né? (Já pensou fazer miojo em 3.14159 minutos? hahaha).

Mas agora, vamos criar outra variável chamada "segundos" pra salvar os segundos restantes. E falando de resto, você se ligou no que a gente vai precisar usar, né?

Isso aí, existe o operador de resto (%). Show! Mas ainda precisamos das horas...

Passo 3

Cara, a gente converteu os segundos em minutos. Pra transformar em horas, a gente só precisa fazer exatamente a mesma coisa mas, em vez de usar os segundos, vamos usar os minutos!

Pronto! Assim, a gente pegou todas as horas que tínhamos em minutos e deixou a variável "minutos" só com o resto. Por último, a gente precisa calcular o número de dias.

Passo 4

Pra calcular a quantidade de dias, podemos pegar as horas atuais e dividir por 24.

A gente também atualizou o número de horas pro resto… E, agora, falta só a gente exibir.

Passo 5

Pra exibir alguma coisa pro usuário, usamos a famigerada função print(), né?

Obs: usamos formatação de string dentro do print, que é muito importante você saber… Caso não esteja familiarizado, tem um tópico que fala tudo sobre isso aqui na matéria, tá? olha lá, é rapidinho…

Agora vou executar pra ver o que acontece.

Pronto! Parece tudo ok, então finalizamos o exercício, mano!!!

Resposta

Exercício Resolvido #2

Elaboração própria

Um mercado contratou você para criar um programa que confere e classifica a validade de seus produtos. Seu programa deve receber do usuário o dia, mês e ano da validade e responder:

  • "Tá tranquilo", caso falte mais de 3 meses para o vencimento.
  • "Alerta", caso falte menos de 3 meses e mais de um mês para o vencimento.
  • "Ferrou", caso falte menos de um mês para o vencimento.
  • "Joga esse bagulho fora!", caso esteja vencido.

Você deve, obrigatoriamente, escrever e usar a função checaDiferencaDeTempo(), que recebe dia, mês, ano de validade e o tempo atual desde 01/01/1970.

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí, seu doido! A gente já tá ligado que vamos precisar usar o módulo time pra resolver essa questão, e sempre é uma boa ideia fazer as importações no início. Então, bora lá!

Agora, bora fazer a função com o nome que foi pedido.

Passo 2

Olha, tá escrito até os parâmetros que a função tem que ter, então vamos só obedecer, ok? Tipo assim:

Colocamos igualzinho o enunciado pediu. Agora, bora desenvolver a função. A gente pode converter o dia, mês e ano pra segundos e ai a gente consegue fazer a subtração dos tempos. Pra isso, vamos usar a função strptime() do módulo time. Essa função consegue converter um tempo em data, e recebe como parâmetro duas strings: o texto e a formatação. Olha:

Criamos a variável validade e colocamos dentro dela o resultado da função strptime. No primeiro parâmetro a gente passou um texto (usei formatação de string, percebeu? tem que estar ligado nisso porque é importante!!!). No segundo, passei uma string no mesmo formato mas, em vez dos dados reais, usei representações %d para dia, %m para mês e %Y para ano. Assim, a gente consegue dizer pra biblioteca onde estão as informações que a gente passou na string! Mas essa função tá retornando uma tupla com várias informações sobre a data, sendo que a gente só quer a quantidade de segundos em relação à época (01/01/1970). Pra isso, vamos usar a função mktime.

quer a diferença de dias. Pra fazer converter segudos pra dias, a gente pode dividir por (60*60*24).

Pronto! Agora, a gente pega a diferença em segundos, converte pra dias e retorna essa diferença. Falta a gente finalizar nosso programa!

Passo 3

O enunciado fala pra gente pegar do usuário os dados de dia, mês e ano. Vamos usar o input pra isso.

Depois de pegar os dados e os converter pra inteiro, a gente chama a função que criamos pra descobrir quantos dias de diferença tem entre a data de validade e a data atual. Vamos ver em qual classificação o bagulho entra agora…

E pronto! Finalizamos o exercício, brother! Valeuu

Resposta

Exercício Resolvido #3

Elaboração própria.

Observe os seguintes números:

  • 948067200.0
  • 863654400.0
  • 087177600.0

Sabendo que os mesmos representam datas no formato de um número do tipo ponto flutuante, faça um programa capaz de decodificar e imprimir tais datas utilizando funções presentes no módulo time.

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Bom, vamos começar do começo.

A primeira coisa que o nosso programa tem que fazer é requisitar uma entrada ao usuário:

Vale ressaltar que como utilizaremos uma função presente no módulo time para resolver esse exercício, devemos realizar a sua importação logo no início do código.

Passo 2

Agora que já temos o número armazenado na variável d a t a , basta utilizarmos o método gmtime para convertermos esse número em uma estrutura do tipo time:

Passo 3

Por fim, tendo uma estrutura do tipo time armazenando a data representada pelo número do tipo ponto flutuante, basta utilizarmos agora o método asctime para realizarmos a impressão dessa data em um formato mais legível:

Resposta

Portanto, ao utilizarmos o nosso programa, descobrimos que as datas representadas pelos números no enunciado são respectivamente:

  • 17/01/2000
  • 15/05/1997
  • 06/10/1972