brutils-python icon indicating copy to clipboard operation
brutils-python copied to clipboard

Conversão de Data para Texto

Open camilamaia opened this issue 1 year ago • 2 comments

Seu pedido de recurso está relacionado a um problema? Por favor, descreva.

Dada uma data no formato dd/mm/aaaa, quero obter uma string correspondente a essa data convertida por extenso em português. A conversão deve seguir as regras gramaticais do idioma, como formatação de meses e o uso correto de preposições.

Por exemplo, converter 15/08/2024 para "Quinze de agosto de dois mil e vinte e quatro".

Descreva a solução que você gostaria

  • Uma função convert_date_to_text, que recebe uma data no formato dd/mm/aaaa (como string) e retorna uma string que representa essa data por extenso.
  • A função deve lidar com datas válidas e retornar None para datas inválidas.
  • Os meses devem ser representados por seus nomes completos, por exemplo, "janeiro", "fevereiro", "março", etc.
  • Para os dias, deve-se usar a forma numérica por extenso, como "primeiro", "dois", "três", etc.
  • O ano deve ser convertido também em palavras, por exemplo, 2024"dois mil e vinte e quatro".
  • Caso a data seja inválida ou o formato não seja reconhecido, a função deve retornar None.

Descreva alternativas que você considerou

  1. Seguir até o passo 8 do guia de contribuição.

  2. Como parte do passo 8, criar o arquivo: brutils-python/brutils/date.py.

    def convert_date_to_text(date): # type: (str) -> str | None
        """
        Converts a given date in Brazilian format (dd/mm/yyyy) to its textual representation.
    
        This function takes a date as a string in the format dd/mm/yyyy and converts it 
        to a string with the date written out in Brazilian Portuguese, including the full 
        month name and the year. 
    
        Args:
            date (str): The date to be converted into text. Expected format: dd/mm/yyyy.
    
        Returns:
            str or None: A string with the date written out in Brazilian Portuguese, 
            or None if the date is invalid.
    
        Example:
            >>> convert_date_to_text("15/08/2024")
            "Quinze de agosto de dois mil e vinte e quatro"
            >>> convert_date_to_text("01/01/2000")
            "Primeiro de janeiro de dois mil"
            >>> convert_date_to_text("31/12/1999")
            "Trinta e um de dezembro de mil novecentos e noventa e nove"
            >>> convert_date_to_text("30/02/2020")
            None
        """
        # Lógica para conversão de data
    

    Importar a nova função no arquivo brutils-python/brutils/__init__.py.

    # Date Imports    
    from brutils.date import (
        convert_date_to_text,
    )
    

    E adicionar o nome da nova função na lista __all__ do mesmo arquivo brutils-python/brutils/__init__.py:

    __all__ = [
        ...
        # Date
        'convert_date_to_text'
    ]
    
  3. Como parte do passo 9, criar o arquivo de teste: brutils-python/tests/test_date.py.

    from unittest import TestCase
    from brutils.date import convert_date_to_text
    
    class TestDate(TestCase):
        def test_convert_date_to_text(self):
            self.assertEqual(convert_date_to_text("15/08/2024"), "Quinze de agosto de dois mil e vinte e quatro")
            self.assertEqual(convert_date_to_text("01/01/2000"), "Primeiro de janeiro de dois mil")
            self.assertEqual(convert_date_to_text("31/12/1999"), "Trinta e um de dezembro de mil novecentos e noventa e nove")
            self.assertIsNone(convert_date_to_text("30/02/2020"))
            self.assertIsNone(convert_date_to_text("invalid"))
            self.assertEqual(convert_date_to_text("29/02/2020"), "Vinte e nove de fevereiro de dois mil e vinte")
            self.assertEqual(convert_date_to_text("01/01/1900"), "Primeiro de janeiro de mil novecentos")
    
            # Implementar mais casos de teste aqui se necessário
    
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

  • A conversão de datas deve seguir as regras gramaticais do português brasileiro.

camilamaia avatar Sep 12 '24 20:09 camilamaia

Pode por gentiliza dar assign para mim nessa issue?

BeneBr avatar Sep 13 '24 18:09 BeneBr

Feito @BeneBr

camilamaia avatar Sep 13 '24 19:09 camilamaia