it-swarm.com.ru

Получение текущей даты в YYYY-MM-DD в Python?

Я использую:

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

вернуть сегодняшнюю дату в виде ГГГГ-ММ-ДД .

Есть ли менее грубый способ добиться этого?

141
Pyderman

Вы можете использовать strftime :

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

Там даже более простой способ, чем принятый ответ; действителен как для Python 2 и 3.

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

Datetime просто прекрасно, если вам нравится вспоминать смешные коды. Вы бы не предпочли простоту?

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

Этот модуль достаточно умен, чтобы понять, что вы имеете в виду

Просто сделайте pip install arrow.

32
Bill Bell

Я всегда использую функцию isoformat() для этого.

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

Обратите внимание, что это также работает с объектами datetime, если вам нужно время в стандартном формате.

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

Другие ответы предполагают использование datetime.datetime в python, но, как сказал @Bill Bell, есть и другие библиотеки, которые предлагают более простые интерфейсы datetime либо как сервис, либо как часть более обширной экосистемы API. Вот две такие библиотеки, которые делают работу с datetimes очень простой.

PANDAS

Вы можете использовать pd.to_datetime из библиотеки pandas . Здесь представлены различные варианты, в зависимости от того, что вы хотите вернуть.

import pandas as pd

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

Как питон datetime объект,

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

Как форматированная строка даты,

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'

Чтобы получить только дату из отметки времени, позвоните Timestamp.date.

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

Помимо to_datetime, вы можете напрямую создавать экземпляр объекта Timestamp , используя

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)

Если вы хотите, чтобы ваш часовой пояс знал о часовом поясе, передайте часовой пояс аргументу tz.

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

МАЯТНИК

Если вы работаете с маятником , есть несколько интересных вариантов. Вы можете получить текущую метку времени с помощью now() или сегодняшнюю дату с помощью 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'))

Кроме того, вы также можете получить дату tomorrow() или yesterday() напрямую, не прибегая к какой-либо дополнительной арифметике 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'))

Доступны различные варианты форматирования.

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'
2
cs95

Я смог получить принятый ответ, как только я импортировал datetime, а затем удалил «datetime.» из команды. Вот что сработало для меня (python 3.6):

from datetime import datetime

date = datetime.today().strftime('%Y-%m-%d')
1
Karl Baker

Я предпочитаю это. (потому что это просто. но может быть как-то неэффективно и глючно. Вы должны проверить код завершения команды Shell, если хотите очень сильно защищенную от ошибок программу.)

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