Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Manipulação de datas com DateTime

Queria deixar também para quem passar por aqui como curiosidade:

Poderíamos usar o datetime para manipular a data com maior precisão, em certos casos do nosso cotidiano, como salvar a data no banco no formato datetime

from datetime import date


class Data:

    def __init__(self, d, m, y) -> None:
        self.d = d
        self.m = m
        self.y = y


    def formatada(self):
        return date(day=self.d, month=self.m, year=self.y).strftime("%d/%m/%Y")

no método formatada, os inteiros inputados são convertidos em data pelo construtor 'date()' da classe date do módulo datetime, e depois a data é formatada em uma string novamente, pelo método strftime() da classe date()

>>> from datas import Data
>>> d = Data(21,11,2007)   
>>> d.formatada()        
'21/11/2007'
>>>

Lembrando também que o strftime() já preenche automaticamento com zero à esquerda caso a data seja de um dígito:

>>> from datas import Data
>>> d2 = Data(1,3,2007)    
>>> d2.formatada()
'01/03/2007'
>>> 
3 respostas
solução!

Henrique,

Acabei de fazer o exercício e cheguei a este resultado:

import datetime

class Data:
    def __init__(self, dia, mes, ano):
        self.data = datetime.datetime(ano, mes, dia)

    def formatada(self):
        print(self.data.strftime("%d/%m/%Y"))

Sobre as formatações da DATA e HORA, consultei o site da "W3 Schools". Está muito bom e tem o "TRY IT" para cada diretiva a saber:

===============================================================

Python Datetime

DirectiveDescriptionExample
%aWeekday, short versionWed
%AWeekday, full versionWednesday
%wWeekday as a number 0-6, 0 is Sunday3
%dDay of month 01-3131
%bMonth name, short versionDec
%BMonth name, full versionDecember
%mMonth as a number 01-1212
%yYear, short version, without century18
%YYear, full version2018
%HHour 00-2317
%IHour 00-1205
%pAM/PMPM
%MMinute 00-5941
%SSecond 00-5908
%fMicrosecond 000000-999999548513
%zUTC offset+0100
%ZTimezoneCST
%jDay number of year 001-366365
%UWeek number of year, Sunday as the first day of week, 00-5352
%WWeek number of year, Monday as the first day of week, 00-5352
%cLocal version of date and timeMon Dec 31 17:41:00 2018
%CCentury20
%xLocal version of date12/31/18
%XLocal version of time17:41:00
%%A % character%
%GISO 8601 year2018
%uISO 8601 weekday (1-7)1
%VISO 8601 weeknumber (01-53)01

https://www.w3schools.com/python/python_datetime.asp

===============================================================

[]'s,

Fabio I.

Maravilha Fábio, gostei da sua abordagem, bem prática também! Só queria mencionar, que fazer a conversão direta é mais clean mesmo, mas pode dar problema, caso as variáveis não tenham recebido um valor válido, talvez validar elas em um método seja mais seguro.

Tmj!!

Henrique,

Depende muito da regra de negócio, no seu código fonte o acesso aos valores de dia, mês e ano é bem mais fácil, pois você declarou uma variável para cada um. Normalmente não é preciso ser assim, mas é possível que precise que estes valores sejam isolados por algum motivo.

[]'s,

Fabio I.