Este é o meu código:
import datetime
today = datetime.date.today()
print(today)
Isso imprime: o 2008-11-22
que é exatamente o que eu quero.
Mas, eu tenho uma lista à qual estou anexando isso e, de repente, tudo fica "instável". Aqui está o código:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
Isso imprime o seguinte:
[datetime.date(2008, 11, 22)]
Como posso obter apenas um encontro simples 2008-11-22
?
str()
(a cada elemento da lista), porque foi exatamente isso queprint
implicitamente fez com seutoday
objeto solo .Respostas:
O porquê: datas são objetos
No Python, datas são objetos. Portanto, quando você os manipula, você manipula objetos, não seqüências de caracteres, nem timestamps nem nada.
Qualquer objeto no Python tem DUAS representações de string:
A representação regular usada por "print" pode ser obtida usando a
str()
função Na maioria das vezes, é o formato legível humano mais comum e é usado para facilitar a exibição. Entãostr(datetime.datetime(2008, 11, 22, 19, 53, 42))
te dá'2008-11-22 19:53:42'
.A representação alternativa usada para representar a natureza do objeto (como dados). Pode ser usado com a
repr()
função e é útil saber que tipo de dados você está manipulando enquanto estiver desenvolvendo ou depurando.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
te dá'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.O que aconteceu foi que, quando você imprimiu a data usando "print", ela foi usada
str()
para que você pudesse ver uma boa sequência de datas. Mas quando você imprimiumylist
, você imprimiu uma lista de objetos e o Python tentou representar o conjunto de dados usandorepr()
.O Como: o que você quer fazer com isso?
Bem, quando você manipula datas, continue usando os objetos date o tempo todo. Eles têm milhares de métodos úteis e a maior parte da API Python espera que as datas sejam objetos.
Quando você quiser exibi-los, basta usar
str()
. No Python, a boa prática é converter tudo explicitamente. Portanto, na hora de imprimir, obtenha uma representação de string da sua data usandostr(date)
.Uma última coisa. Quando você tentou imprimir as datas, você imprimiu
mylist
. Se você deseja imprimir uma data, imprima os objetos de data, não o contêiner (a lista).Por exemplo, você deseja imprimir toda a data em uma lista:
Observe que , nesse caso específico , você pode até omitir,
str()
porque a impressão o utilizará para você. Mas não deve se tornar um hábito :-)Caso prático, usando seu código
Formatação avançada de data
As datas têm uma representação padrão, mas você pode imprimi-las em um formato específico. Nesse caso, você pode obter uma representação de string personalizada usando o
strftime()
métodostrftime()
espera um padrão de sequência explicando como você deseja formatar sua data.POR EXEMPLO :
Toda a letra após a
"%"
representa um formato para algo:%d
é o número do dia%m
é o número do mês%b
é a abreviação do mês%y
é o ano nos últimos dois dígitos%Y
é o ano todoetc
Dê uma olhada na documentação oficial , ou na referência rápida de McCutchen, você não pode conhecer todas elas.
Desde o PEP3101 , cada objeto pode ter seu próprio formato usado automaticamente pelo formato do método de qualquer sequência. No caso da data e hora, o formato é o mesmo usado no strftime. Então você pode fazer o mesmo que acima, desta forma:
A vantagem deste formulário é que você também pode converter outros objetos ao mesmo tempo.
Com a introdução de literais de cadeia de caracteres formatada (desde Python 3.6, 23/12/2016), isso pode ser escrito como
Localização
As datas podem se adaptar automaticamente ao idioma e cultura locais se você as usar da maneira certa, mas é um pouco complicado. Talvez para outra pergunta sobre SO (Stack Overflow) ;-)
fonte
inspect.isclass
para ter certeza). As pessoas tendem a dizer "tipo" para embutidos e "classe" para o resto, mas isso não é importanteEditar:
Após a sugestão de Cees, comecei a usar o tempo também:
fonte
datetime.datetime
?datetime import datetime
e entãoprint datetime().now().strftime("%Y-%m-%d %H:%M")
. Apenas uma diferença de sintaxe.from datetime import date; date.today().strftime("%Y-%m-%d")
ainda me parece antitônico, mas é o melhor sem eleimport time
. Eu acho que o módulo datetime é para matemática de datas.from datetime import datetime as dt
e agora podemos jogar comdt.now()
Os objetos date, datetime e time suportam um método strftime (format), para criar uma sequência que representa a hora sob o controle de uma sequência explícita de formato.
Aqui está uma lista dos códigos de formato com sua diretiva e significado.
Isto é o que podemos fazer com os módulos datetime e time em Python
Isso imprimirá algo como isto:
fonte
Use date.strftime. Os argumentos de formatação são descritos na documentação .
Este é o que você queria:
Este leva o Local em consideração. (faça isso)
fonte
Isso é mais curto:
fonte
fonte
Ou até
Fora: '25 .12.2013
ou
Fora: 'Hoje - 25.12.2013'
Fora: 'quarta-feira'
Fora: '__main ____ 2014.06.09__16-56.log'
fonte
Resposta simples -
fonte
Com
datetime
formatação de sequência específica de tipo (consulte a resposta do nk9 usandostr.format()
.) Em um literal de sequência de caracteres formatada (desde Python 3.6, 23-12-2016):As directivas formato de data / hora não são documentados como parte do formato de seqüência de sintaxe , mas sim na
date
,datetime
etime
dastrftime()
documentação. Eles são baseados no Padrão C de 1989, mas incluem algumas diretivas ISO 8601 desde o Python 3.6.fonte
Você precisa converter o objeto de data e hora em uma sequência.
O código a seguir funcionou para mim:
Entre em contato se precisar de mais ajuda.
fonte
Odeio a ideia de importar muitos módulos por conveniência. Prefiro trabalhar com o módulo disponível, que neste caso é, em
datetime
vez de chamar um novo módulotime
.fonte
a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Você pode fazer:
fonte
Considerando o fato de que você pediu algo simples para fazer o que queria, você poderia apenas:
fonte
Para aqueles que desejam data com base no código do idioma e não incluem hora, use:
fonte
Você pode anexá-lo como uma string?
fonte
Como
print today
retorna o que você deseja, isso significa que a__str__
função do objeto today retorna a string que você está procurando.Então você pode fazer
mylist.append(today.__str__())
também.fonte
Você pode usar easy_date para facilitar:
fonte
Um aviso rápido para a minha resposta - eu só estou aprendendo Python há cerca de duas semanas, por isso não sou um especialista; portanto, minha explicação pode não ser a melhor e posso usar terminologia incorreta. Enfim, aqui vai.
Percebi no seu código que, quando você declarou sua variável,
today = datetime.date.today()
escolheu nomear sua variável com o nome de uma função interna.Quando sua próxima linha de código
mylist.append(today)
anexou sua lista, ela anexou a cadeia inteiradatetime.date.today()
, que você definiu anteriormente como o valor da suatoday
variável, em vez de apenas anexá-latoday()
.Uma solução simples, embora talvez a maioria dos codificadores não usaria ao trabalhar com o módulo datetime, é alterar o nome da sua variável.
Aqui está o que eu tentei:
e imprime
yyyy-mm-dd
.fonte
Aqui está como exibir a data como (ano / mês / dia):
fonte
isso será impresso em 23-06-2018 se é isso que você deseja :)
fonte
Dessa forma, você pode obter a data formatada como este exemplo: 22 de junho de 2017
fonte
%b
você obterá as primeiras palavras de três meses e com%B
o mês inteiro. Exemplo:datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")
retornará '2018-Oct-04 09:44:08'Não entendi completamente, mas posso usar
pandas
para obter horários no formato certo:E:
Mas é armazenar strings, mas fácil de converter:
fonte