Obtendo a data de hoje em AAAA-MM-DD em Python?


326

Estou a usar:

str(datetime.datetime.today()).split()[0]

para retornar a data de hoje no YYYY-MM-DD formato.

Existe uma maneira menos grosseira de conseguir isso?


3
O que você quer dizer com "bruto"?
Gombat 9/09/15

4
Talvez isto? \ n agora = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d"))
Gombat 9/09/15

3
@Gombat que quero dizer é, na minha experiência, geralmente há um construído em forma de obter a coisa que queremos em Python sem ter que dividir, índice, concat, junte etc.
Pyderman

Respostas:


604

Você pode usar o strftime :

from datetime import datetime

datetime.today().strftime('%Y-%m-%d')

Além disso, para quem também procura uma hora, um minuto e um segundo preenchidos com zero no final: (Comentado por Gabriel Staples )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')

também há uma forte probabilidade de que "% x" iria funcionar ... mas isso é locale dependente
Joran Beasley

19
Para quem também procura uma hora, um minuto e um segundo preenchidos com zero no final:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples

que tal apenas time.strftime("%Y-%m-%d")?
Aderchox 27/08/19

Para a data UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

Vale a pena notar que datetem este disponível, bem comodatetime
dummyDev

116

Você pode usar datetime.date.today()e converter o datetime.dateobjeto resultante em uma sequência:

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'

É possível mudar o separador para /?
Stevoisiak 31/01

3
@StevenVascellaro seriadate.today().strftime('%Y/%m/%d')
kmonsoor 31/01

2
@StevenVascellaro Bad idea. O leitor normalmente assume o separador .como 'DMY', o separador /para M/D/Ye o separador -para Y-M-D. Embora nem todos sigam essas diretrizes, ajudaria a ler datas internacionalmente, desde que nem todos tenham mudado Y-M-D.
glglgl

1
@glglgl Estou trabalhando com uma API que assume o formato de data americano m / d / a. Eu já alterei o pedido no meu aplicativo.
Stevoisiak

1
@glglgl Sim, eu estou usando m / d / a
Stevoisiak

35

Datetime é simplesmente adorável se você gosta de lembrar códigos engraçados. Você não prefere a simplicidade?

>>> import arrow
>>> arrow.now().format('YYYY-MM-DD')
'2017-02-17'

Este módulo é inteligente o suficiente para entender o que você quer dizer .

Apenas faça pip install arrow.

Adendo: em resposta àqueles que se exercitam sobre essa resposta, digamos que a flecha representa uma das alternativas abordagens para lidar com datas em Python. Isso é principalmente o que eu queria sugerir.


17
para uma tarefa simples como essa, por que usar outra biblioteca quando a biblioteca interna pode fazê-lo da maneira mais simples. Obviamente, se o usuário precisar de outras funções relacionadas a {time, date}, criar uma nova biblioteca fará sentido.
kmonsoor 16/08/19

2
você me fez rir ao ler essa segunda linha de código. como isso é melhor que print(date.today())>> "2018-12-16" ?? lol e obtenha facilmente os valores int t.year,t.month,t.day+1>> (2018, 12, 17) onde t = date.today()e o fato de as pessoas não precisarem chamar a seta verde para saber a hora. oh Deus isso é muito código para lembrar ...
Puddle

1
@ Poça: Hilariante.
Bill Sino

@kmonsoor Qual é a import datetimediferença import arrow? Claro que um está incorporado, mas se arrowfornece um formato mais conveniente, por que não usá-lo?
information_interchange

1
@information_interchange você já respondeu à sua pergunta. Built-in vs não. Se alguém precisa dessas coisas extras, claro, por que não arrow? Mas, para muitos projetos simples, é apenas desnecessário. Além disso, em muitos projetos internos da empresa, as pessoas precisam obter aprovação para incluir novas bibliotecas.
kmonsoor 19/11/19

30

Eu sempre uso a isoformat()função para isso.

from datetime import date    
today = date.today().isoformat()
print(today) # '2018-12-05'

Observe que isso também funciona em objetos de data e hora se você precisar da hora no formato padrão também.

from datetime import datetime
now = datetime.today().isoformat()
print(now) # '2018-12-05T11:15:55.126382'

15

Outras respostas sugerem o uso de python datetime.datetime, mas como @Bill Bell disse, existem outras bibliotecas que oferecem datetimeinterfaces mais simples como um serviço ou como parte de um ecossistema maior de APIs. Aqui estão duas dessas bibliotecas que datetimessimplificam o trabalho.

PANDAS

Você pode usar pd.to_datetimena biblioteca de pandas . Aqui estão várias opções, dependendo do que você deseja devolver.

import pandas as pd

pd.to_datetime('today')  # pd.to_datetime('now')
# Timestamp('2019-03-27 00:00:10.958567')

Como um objeto de data e hora python ,

pd.to_datetime('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 50, 42, 587629)

Como uma sequência de datas formatada,

pd.to_datetime('today').isoformat()
# '2019-04-18T04:03:32.493337'

# Or, `strftime` for custom formats.
pd.to_datetime('today').strftime('%Y-%m-%d')
# '2019-03-27'

Para obter apenas a data do registro de data e hora, ligue Timestamp.date.

pd.to_datetime('today').date()
# datetime.date(2019, 3, 27)

Além disso to_datetime, você pode instanciar diretamente um Timestampobjeto usando,

pd.Timestamp('today')  # pd.Timestamp('now')
# Timestamp('2019-04-18 03:43:33.233093')

pd.Timestamp('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 53, 46, 220068)

Se você deseja conscientizar o fuso horário do carimbo de data e hora, passe um fuso horário para o tzargumento.

pd.Timestamp('now', tz='America/Los_Angeles')
# Timestamp('2019-04-18 03:59:02.647819-0700', tz='America/Los_Angeles')

PÊNDULO

Se você estiver trabalhando com pêndulo , existem algumas opções interessantes. Você pode obter o carimbo de data / hora atual usando now()ou a data de hoje usando today().

import pendulum 

pendulum.now()
# DateTime(2019, 3, 27, 0, 2, 41, 452264, tzinfo=Timezone('America/Los_Angeles'))

pendulum.today()
# DateTime(2019, 3, 27, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Além disso, você também pode obter a data tomorrow()ou yesterday()a data diretamente, sem ter que fazer nenhuma aritmética adicional de timedelta.

pendulum.yesterday()
# DateTime(2019, 3, 26, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

pendulum.tomorrow()
# DateTime(2019, 3, 28, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Existem várias opções de formatação disponíveis.

pendulum.now().to_date_string()
# '2019-03-27'

pendulum.now().to_formatted_date_string()
# 'Mar 27, 2019'

pendulum.now().to_day_datetime_string()
# 'Wed, Mar 27, 2019 12:04 AM'

3
Grandes pandas de notícias também!
ZygD 18/04/19

1
Este é realmente incrível, especialmente quando se está trabalhando em pandas
amante

pd.to_datetime (day) .date () é útil se você estiver usando pandas e não quiser converter para um str. Obrigado!
Brndn 16/04

4

Resposta muito tardia, mas você pode usar:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14

1
obrigado, este é o mais limpo.
Barbaros Özhan


-5

Eu prefiro isso, porque isso é simples, mas talvez de alguma forma ineficiente e com erros. Você deve verificar o código de saída do comando shell se desejar um programa fortemente à prova de erros.

os.system('date +%Y-%m-%d')

4
Isso deve ser usado apenas com a finalidade de verificar o que o comando date do sistema retornará, em vez de realmente formatar uma data. Isso ocorre por vários motivos além da verificação do código de saída. 1. Não é portátil. O comando date no Windows define a data 2. Ineficiente. Ele precisa criar um shell inteiro, que deve analisar, localizar e executar o comando, retornar a saída e destruir esse shell 3. É simplesmente não-sintônico - mostra que você não conhece bibliotecas fundamentais conhecidas e pode também enganar os recém-chegados à linguagem que ver que o código
Capitão Lepton
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.