OBS: Para realizar um raise exception/error neste caso, seria implementado baseando os dias, meses e anos em um intervalo ou teria uma maneira mais prática e eficiente?
OBS: Para realizar um raise exception/error neste caso, seria implementado baseando os dias, meses e anos em um intervalo ou teria uma maneira mais prática e eficiente?
Olá Guilherme, tudo bem com você?
Meus parabéns pela implementação do código da atividade, fico feliz que tenha compartilhado-o com a comunidade do fórum Alura.
No Python temos a biblioteca datetime
que permite trabalharmos com a manipulação e validação de data e horas com uma maior facilidade, assim, podemos trabalhar com as exceções e levantamento de erros de uma forma prática.
Para implementar o uso da biblioteca datetime
na classe Data
e criarmos uma validação das datas e realizar o levantamento de erro e exceções usaremos as cláusulas try / except
. Essa implementação será feita no método inicializador (__init__
) como apresentado abaixo:
def __init__(self, ano, mes, dia, hora, minuto):
try:
self.data = datetime.datetime(ano, mes, dia, hora, minuto)
except ValueError as e:
raise ValueError(e)
No código acima, será realizada a tentativa da declaração do atributo data
, exceto quando os valores informados geram erro.
Para exibir a data com a formatação, usaremos o método strftime
da biblioteca datetime
. Como apresentado abaixo.
def formata(self):
print(self.data.strftime('%d/%m/%Y %H:%M'))
No código acima é utilizado códigos de formatação para transformar a saída no padrão Brasileiro, onde:
Caso alguma regra das apresentadas acima seja burlada, obteremos o erro de ValueError.
Por ser um recurso no formato estrangeiro, no momento da criação do objeto devemos informar os valores na seguinte ordem: ano
, mês
, dia
, hora
, minutos
. Como apresentado abaixo.
data = Data(2022, 12, 9, 13, 5)
Código completo com as mudanças necessárias
import datetime
class Data:
def __init__(self, ano, mes, dia, hora, minuto):
try:
self.data = datetime.datetime(ano, mes, dia, hora, minuto)
except ValueError as e:
raise ValueError(e)
def formata(self):
print(self.data.strftime('%d/%m/%Y %H:%M'))
data = Data(2022, 12, 9, 13, 5)
data.formata()
Resultado
09/12/2022 13:05
Para aprimorar ainda mais o seu aprendizado sobre a biblioteca datetime
, recomendo a leitura dos artigos abaixo, onde será abordado com detalhes sobre o uso e aplicações dessa biblioteca.
O segundo artigo recomendado acima está em inglês, o uso da língua inglesa é bem comum na área de tecnologia, mas não se preocupe, caso não tenha afinidade com essa linguagem, recomendo que utilize o tradutor do navegador para uma melhor compressão.
Lembre-se que pode contar sempre com o fórum Alura, seja para compartilhar o seu desenvolvimento ou para tirar suas dúvidas.
Fico à disposição.
Abraços e bons estudos.