Eu tenho um método python que aceita uma entrada de data como uma seqüência de caracteres .
Como adiciono uma validação para garantir que a sequência de datas passada no método esteja no ffg. formato:
'YYYY-MM-DD'
caso contrário, o método deve gerar algum tipo de erro
Respostas:
fonte
A biblioteca Python
dateutil
foi projetada para isso (e mais). Ele automaticamente converterá isso em umdatetime
objeto para você e aumentará umValueError
se não puder.Como um exemplo:
Isso gera a
ValueError
se a data não estiver formatada corretamente:dateutil
também é extremamente útil se você começar a analisar outros formatos no futuro, pois ele pode lidar com os formatos mais conhecidos de maneira inteligente e permite modificar sua especificação:dateutil
exemplos de análise .Ele também lida com fusos horários, se você precisar.
Atualização baseada em comentários :
parse
também aceita o argumento de palavra-chavedayfirst
que controla se o dia ou o mês deve chegar primeiro se a data for ambígua. O padrão é Falso. Por exemplofonte
parse('13/12/2001')
é "13 de dezembro", masparse('11/12/2001')
é "12 de novembro" (o primeiro resultado sugere "11 de dezembro" aqui).parse
na verdade, usa umdayfirst
argumento de palavra - chave que permite controlar isso.parse('11/12/2001', dayfirst=True)
retornará "11 de dezembro" O padrão do dateutil édayfirst=False
datetutil.parser.parse()
aceita muitos formatos de hora (você pode encontrar outros exemplos com entrada ambígua). Se você deseja validar que sua entrada está no formato AAAA-MM-DD, aparse()
função é a ferramenta errada..parse()
retornar a string de formato além dodatetime
objeto?Eu acho que a função de validação completa deve ficar assim:
Executando apenas
não é suficiente porque o método strptime não verifica se mês e dia do mês são números decimais preenchidos com zero. Por exemplo
será executado sem erros.
fonte
datetime.strptime(date_text, "%Y-%m-%d")
?.. isso gera a
ValueError
se receber um formato incompatível...se você estiver lidando muito com datas e horas (no sentido de objetos de data e hora, em oposição a flutuadores de data e hora unix), é uma boa ideia olhar para o módulo pytz e, para storage / db, armazenar tudo no UTC .
fonte
Esta é a maneira mais fácil:
fonte