Converter objeto datetime em uma String de data apenas em Python

282

Eu vejo muito em converter uma string de data em um datetimeobjeto em Python, mas quero seguir o outro caminho.
eu tenho

datetime.datetime(2012, 2, 23, 0, 0)

e gostaria de convertê-lo para string como '2/23/2012'.

wilbev
fonte

Respostas:

487

Você pode usar o strftime para ajudá-lo a formatar sua data.

Por exemplo,

import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')

produzirá:

'02/23/2012'

Mais informações sobre formatação, veja aqui

Levon
fonte
6
Muito útil para DateTimeFieldou DateFieldno django. Graças
erajuan
3
use t = datetime.datetime.now()para usar a data atual
gizzmole
Pelo que sei pelos documentos, não há como retornar uma data preenchida diferente de zero, ou seja, '23/02/2012'.
Ron Kalian
183

datee datetimeobjetos (e timetambém) suportam um mini-idioma para especificar a saída , e há duas maneiras de acessá-la:

  • chamada de método direto: dt.strftime('format here'); e
  • novo método de formato: '{:format here}'.format(dt)

Portanto, seu exemplo pode parecer com:

dt.strftime('%m/%d/%Y')

ou

'{:%m/%d/%Y}'.format(dt)

Para completar, você também pode acessar diretamente os atributos do objeto, mas só obtém os números:

'%s/%s/%s' % (dt.month, dt.day, dt.year)

Vale a pena o tempo gasto para aprender a mini-língua.


Para referência, aqui estão os códigos usados ​​no mini-idioma:

  • %a Dia da semana como nome abreviado da localidade.
  • %A Dia da semana como o nome completo da localidade.
  • %w Dia da semana como um número decimal, onde 0 é domingo e 6 é sábado.
  • %d Dia do mês como um número decimal preenchido com zero.
  • %b Mês como nome abreviado da localidade.
  • %B Mês como nome completo do código do idioma.
  • %m Mês como um número decimal preenchido com zero. 01, ..., 12
  • %y Ano sem século como um número decimal preenchido com zero. 00, ..., 99
  • %Y Ano com o século como um número decimal. 1970, 1988, 2001, 2013
  • %H Hora (relógio de 24 horas) como um número decimal preenchido com zero. 00, ..., 23
  • %I Hora (relógio de 12 horas) como um número decimal preenchido com zero. 01, ..., 12
  • %p O equivalente da localidade é AM ou PM.
  • %M Minuto como um número decimal preenchido com zero. 00, ..., 59
  • %S Segundo como um número decimal preenchido com zero. 00, ..., 59
  • %f Microssegundo como um número decimal, preenchido com zero à esquerda. 000000, ..., 999999
  • %z Deslocamento UTC no formato + HHMM ou -HHMM (vazio se for ingênuo), +0000, -0400, +1030
  • %Z Nome do fuso horário (vazio se ingênuo), UTC, EST, CST
  • %j Dia do ano como um número decimal preenchido com zero. 001, ..., 366
  • %U Número da semana do ano (domingo é o primeiro) como um número decimal preenchido com zero.
  • %W Número da semana do ano (segunda-feira é o primeiro) como um número decimal.
  • %c Representação apropriada de data e hora da localidade.
  • %x Representação de data apropriada da localidade.
  • %X Representação de tempo apropriada da localidade.
  • %% Um caractere '%' literal.
Ethan Furman
fonte
29

Outra opção:

import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'
Paul Joireman
fonte
Embora a pergunta seja sobre obter apenas "data", vim para ^ isto, então, obrigado. Além disso, para obter uma sequência um pouco mais humana: datetime.datetime.now().ctime()==>'Wed Sep 4 13:12:39 2019'
Denis
13

Você pode usar métodos simples de formatação de string:

>>> dt = datetime.datetime(2012, 2, 23, 0, 0)
>>> '{0.month}/{0.day}/{0.year}'.format(dt)
'2/23/2012'
>>> '%s/%s/%s' % (dt.month, dt.day, dt.year)
'2/23/2012'
juliomalegria
fonte
3
Da mesma forma, você pode fazer algo parecido '{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5)). Veja mais em pyformat.info
mway
9

type-specific formatting também pode ser usado:

t = datetime.datetime(2012, 2, 23, 0, 0)
"{:%m/%d/%Y}".format(t)

Resultado:

'02/23/2012'
midori
fonte
4

Se você procura uma maneira simples de datetimeconverter conversões de string e pode omitir o formato. Você pode converter um datetimeobjeto stre usar o fatiamento da matriz.

In [1]: from datetime import datetime

In [2]: now = datetime.now()

In [3]: str(now)
Out[3]: '2019-04-26 18:03:50.941332'

In [5]: str(now)[:10]
Out[5]: '2019-04-26'

In [6]: str(now)[:19]
Out[6]: '2019-04-26 18:03:50'

Mas observe o seguinte. Se outras soluções aumentarem AttributeErrorquando a variável estiver Nonenesse caso, você receberá uma 'None'string.

In [9]: str(None)[:19]
Out[9]: 'None'
Daniil Mashkin
fonte
3

É possível converter um objeto datetime em uma string trabalhando diretamente com os componentes do objeto datetime.

from datetime import date  

myDate = date.today()    
#print(myDate) would output 2017-05-23 because that is today
#reassign the myDate variable to myDate = myDate.month 
#then you could print(myDate.month) and you would get 5 as an integer
dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year)    
# myDate.month is equal to 5 as an integer, i use str() to change it to a 
# string I add(+)the "/" so now I have "5/" then myDate.day is 23 as
# an integer i change it to a string with str() and it is added to the "5/"   
# to get "5/23" and then I add another "/" now we have "5/23/" next is the 
# year which is 2017 as an integer, I use the function str() to change it to 
# a string and add it to the rest of the string.  Now we have "5/23/2017" as 
# a string. The final line prints the string.

print(dateStr)  

Resultado -> 23/05/2017

Darrell White
fonte
2

Você pode converter datetime em string.

published_at = "{}".format(self.published_at)
Kimsal San
fonte
2

A concatenação de cadeias,, str.joinpode ser usada para criar a cadeia.

d = datetime.now()
'/'.join(str(x) for x in (d.month, d.day, d.year))
'3/7/2016'
Nizam Mohamed
fonte
1

Se você quiser o tempo também, basta ir com

datetime.datetime.now().__str__()

Imprime 2019-07-11 19:36:31.118766no console para mim

phil294
fonte