Teoria

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!

Mas e pra usar datas?

Função localtime

Função sleep

Exercícios Resolvidos

Exercício Resolvido #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.

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

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.

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

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.

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

Exercício Resolvido #4

Suponha que uma empresa possui uma máquina que em determinadas situações superaquece o seu motor, e, para que o equipamento seja resguardado, um dos engenheiros responsáveis por essa máquina pausa o seu funcionamento por alguns segundos para resfriá-la.

Visando economizar tempo e esforço, você foi contratado para desenvolver um programa integrado com a máquina capaz de pausar o funcionamento dela por uma quantidade de segundos determinados pelo engenheiro diretamente de sua sala.

Defina a função r e s f r i a M o t o r e crie um programa teste que pause o funcionamento da máquina por uma quantidade de segundos definida pelo engenheiro responsável.

Passo 1

Como iremos pausar o programa, a primeira coisa que nós devemos fazer é importar o módulo time.

Passo 2

Com o módulo time devidamente importado, nós já somos capazes de definir a função r e s f r i a M o t o r :

Para isso, basta utilizarmos o comando def para definirmos a função denominada r e s f r i a M o t o r que terá como único parâmetro o tempo de pausa definido pelo engenheiro. Com isso, utilizaremos a função s l e e p presente no módulo time para pausarmos o programa, para isso passaremos como parâmetro dessa função t e m p o P a u s a . Por fim, basta retornarmos para o código principal, uma vez que esse trecho de código só será executado após a pausa.

Resposta

Portanto, ao adicionarmos as entradas e algumas frases informativas (início da pausa e retomada do funcionamento) o código final do nosso programa teste ficará da seguinte forma:

Repare que a única coisa que nós precisamos fazer para esse programa funcionar é chamar a função r e s f r i a M o t o r e passar a variável s e g u n d o s (que armazena o valor inserido pelo engenheiro) como parâmetro.

Exercício Resolvido #5

Faça um programa que leia os seguintes dados de forma individual: dia, mês, ano, horas, minutos e segundos, crie uma estrutura d a t a utilizando a função strptime presente no módulo time e imprima as informações dessa estrutura (data e hora) utilizando a função asctime presente no mesmo módulo.

Exemplo de utilização da função asctime:

Onde e s t r u t u r a D a t a é uma struct que armazena as informações de uma data.

Passo 1

Vamos começar importando o módulo time e requisitando a entrada de cada um dos dados necessários para o funcionamento do nosso programa:

Passo 2

O que nós temos que fazer agora é criar uma estrutura d a t a que será constituída pelos dados armazenados por cada uma dessas variáveis, para isso utilizaremos a função strptime (já vista nos exercícios anteriores):

Basicamente, esse código está dizendo ao programa que a estrutura d a t a será composta por informações nos seguintes modelos: “dd/mm/aaaa” e “hh:mm:ss” que irão compor a data e hora que serão impressas ao fim do programa. Vale ressaltar que esses modelos servem apenas como uma base de substituição para os dados armazenados, que ao serem substituídos, formarão de fato a estrutura d a t a .

Passo 3

Por fim, como já temos uma estrutura d a t a com as informações da data que iremos escrever por extenso, basta passarmos essa estrutura como parâmetro para a função asctime:

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #6

Faça um programa que imprima a seguinte frase: “Hoje é dia 0 de 1 de 2.”

Onde:

  • 1 – Deve ser substituído pelo dia atual do sistema;
  • 2 – Deve ser substituído pelo mês atual do sistema;
  • 3 – Deve ser substituído pelo ano atual do sistema.

Utilize o módulo time.

Passo 1

Esse exercício é moleza, a primeira coisa que nós temos que fazer, como o próprio enunciado já diz, é importar o módulo time.

Passo 2

Com o módulo time importado, nós podemos utilizar a função localtime, que irá nos fornecer em uma estrutura alguns dados do sistema relacionados a data e hora.

Passo 3

Tendo esses dados armazenados em d a t a , nós podemos finalmente imprimir a frase apresentada no enunciado substituindo os número apenas pelos campos da estrutura que nos interessam (dia, mês e ano).

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #7

Faça um programa que receba a data e hora de lançamento de um produto e imprima de acordo com a data atual do sistema uma das seguintes frases:

  • O produto ainda não foi lançado;
  • O produto acabou de ser lançado;
  • O produto já foi lançado.

Passo 1

Vamos começar o nosso programa importando o módulo time, uma vez que precisamos acessar a data e hora do sistema, e requisitando os dados do lançamento do produto ao usuário:

Com esses comandos, o programa será capaz de ler dados digitados nos seguintes formatos: “DD/MM/AAAA” e “HH:MM:SS”.

Passo 2

Após isso, podemos utilizar a função localtime para obtermos as informações de data e hora do próprio sistema:

E em seguida, podemos através da função strptime transformar todos aqueles dados inseridos pelo usuário em uma única estrutura time:

Passo 3

Por fim, basta utilizarmos o comando condicional if para verificarmos se a data atual é menor, igual ou maior que a data de lançamento do produto e imprimirmos a frase correspondente dependendo do caso:

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #8

Sabendo que a função mktime (presente no módulo time) é responsável por converter uma estrutura time para um número do tipo float que representa uma determinada data e hora, o que será impresso na tela ao executarmos o código abaixo:

Passo 1

Para entendermos esse exercício, precisamos conhecer cada uma dessas funções. Então, caso você ainda não tenha feito os exercícios anteriores, resolva eles e depois volte aqui!

Passo 2

Bom, sabemos que d a t a contém uma estrutura com os dados atuais de data e hora do sistema e que a mesma está sendo passada como parâmetro para uma função mktime. Logo, podemos concluir que os dados de data e hora do sistema estão sendo convertidos em um número do tipo float que os representará.

Passo 3

Em seguida, esse número do tipo float está sendo passado como parâmetro para a função gmtime que por sua vez é responsável por converter números do tipo float em estruturas time. Sendo assim, esse número será convertido e assumirá novamente a forma de uma estrutura time que contém os dados de data e hora do sistema.

Passo 4

Por fim, essa estrutura time será passada como parâmetro para a função asctime que basicamente irá imprimir os dados de data e hora armazenados nessa estrutura.

Resposta

Portanto, podemos concluir que serão impressos na tela a data e hora atual do local em que o sistema está sendo executado.