Получение сегодняшней даты в YYYY-MM-DD в Python?


326

Я использую:

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

вернуть сегодняшнюю дату в YYYY-MM-DDформате.

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


3
Что ты имеешь в виду под "сырой"?
Гомбат

4
Может быть, это? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Гомбат,

3
@Gombat Что я имею в виду, по моему опыту, в Python обычно есть способ получить то, что нам нужно, без необходимости разбивать, индексировать, объединять, объединять и т. Д.
Pyderman

Ответы:


604

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

from datetime import datetime

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

Кроме того, для тех, кто ищет ноль, минуты и секунды в конце: (Комментарий Габриэля Стейплса )

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

Существует также высокая вероятность того, что "% x" будет работать ... но это зависит от
региона

19
Для тех, кто ищет ноль, час и минуту в конце:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Габриэль Стейплз

как насчет просто time.strftime("%Y-%m-%d")?
aderchox

Для даты UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

Стоит отметить, что dateэто доступно, а такжеdatetime
dummyDev

116

Вы можете использовать datetime.date.today()и преобразовать полученный datetime.dateобъект в строку:

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

Можно ли изменить разделитель на /?
Stevoisiak

3
@ SteveVascellaro это было быdate.today().strftime('%Y/%m/%d')
kmonsoor

2
@ StevenVascellaro Плохая идея. Читатель обычно принимает разделитель .на «DMY», разделитель /на M/D/Yи разделитель -на Y-M-D. Хотя не все следуют этим рекомендациям, это помогло бы читать даты на международном уровне, если не все переключились на них Y-M-D.
glglgl

1
@glglgl Я работаю с API, который предполагает американский формат даты м / д / у. Я уже изменил порядок в моей заявке.
Stevoisiak

1
@glglgl Да, я использую м / д / г
Stevoisiak

35

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

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

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

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

Приложение: Отвечая на вопрос тех, кто начал заниматься этим вопросом, позвольте мне сказать, что стрелка представляет один из альтернативных подходов к работе с датами в Python. Это в основном то, что я хотел предложить.


17
для такой простой задачи, как эта, зачем использовать другую библиотеку, если встроенная библиотека может сделать это так же просто. Конечно, если пользователю нужны другие функции, связанные с {time, date}, использование новой библиотеки имеет смысл.
kmonsoor

2
Вы заставили меня смеяться над чтением этой второй строки кода. как это лучше чем print(date.today())>> "2018-12-16" ?? LOL и легко получить значения INT t.year,t.month,t.day+1>> (2018, 12, 17), где t = date.today()и факт, люди не должны вызывать зеленую стрелку, чтобы сообщить им время. о боже, это слишком много кода, чтобы помнить ...
Лужа

1
@ Лужа: веселый.
Билл Белл

@ kmonsoor Чем import datetimeотличается от import arrow? Конечно, он встроен, но если он arrowпредоставляет более удобный формат, то почему бы не использовать его?
информацией

1
@information_interchange вы уже ответили на свой вопрос. Встроенный против нет. Если кому-то нужны эти дополнительные вещи, конечно, почему бы и нет arrow? Но для многих простых проектов это просто не нужно. Кроме того, во многих внутренних проектах компании необходимо получить разрешение на включение новых библиотек.
kmonsoor

30

Я всегда использую 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'

15

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

PANDAS

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

import pandas as pd

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

Как объект даты и времени Python ,

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'

3
Отличная новость, у панд тоже есть!
ZygD

1
Это действительно потрясающе, особенно когда вы работаете над пандами
loveR

pd.to_datetime (day) .date () полезен, если вы используете панд и не хотите конвертировать в str. Спасибо!
Brndn



-5

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

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

4
Это следует использовать только для проверки того, что будет возвращать команда системной даты, а не для форматирования даты. Это по нескольким причинам, кроме проверки кода выхода. 1. Не переносимый. Команда date в Windows устанавливает дату 2. Неэффективно. Он должен создать целую оболочку, которая затем должна проанализировать, найти и выполнить команду, вернуть выходные данные, а затем уничтожить эту оболочку 3. Это просто не пифонично - это показывает, что вы не знаете хорошо известные фундаментальные библиотеки, и может также ввести в заблуждение новичков в языке, который видит этот код
капитан Лептон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.