Отримання сьогоднішньої дати у РРРР-ММ-DD в Python?


325

Я використовую:

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

щоб повернути сьогоднішню дату у YYYY-MM-DDформаті.

Чи є менш грубий спосіб цього досягти?


3
Що ви маєте на увазі під "сирим"?
Гомбат

4
можливо, це? \ n зараз = datetime.datetime.now () \ n str (now.strearch ("Y-% m-% d")
Гомбат

3
@Gombat Що я маю на увазі, як на моєму досвіді, зазвичай існує вбудований спосіб отримати те, що ми хочемо в Python, не розбиваючись, індексуючи, стискаючи, приєднуючись тощо.
Pyderman

Відповіді:


602

Ви можете використовувати стрімкінг :

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")?
адерхокс

За датою UTC:datetime.utcnow().strftime('%Y-%m-%d')
Проти Біро

Варто зауважити, що dateтакий доступний також єdatetime
dummyDev

116

Ви можете використовувати datetime.date.today()та конвертувати отриманий datetime.dateоб'єкт у рядок:

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

Чи можна змінити роздільник на /?
Stevoisiak

3
@StevenVascellaro це було бdate.today().strftime('%Y/%m/%d')
kmonsoor

2
@StevenVascellaro Погана ідея. Зчитувач зазвичай передбачає роздільник .на "DMY", сепаратор /на M/D/Yі роздільник -на Y-M-D. Хоча далеко не всі дотримуються цих вказівок, це допоможе прочитати дати в усьому світі, доки не всі перейшли Y-M-D.
glglgl

1
@glglgl Я працюю з api, який передбачає американський формат дати m / d / y. Я вже змінив порядок у своїй заяві.
Stevoisiak

1
@glglgl Так, я використовую m / d / y
Stevoisiak

35

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

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

Цей модуль досить розумний, щоб зрозуміти, що ви маєте на увазі .

Просто роби pip install arrow.

Додаток: У відповідь на тих, хто вправляється на цю відповідь, дозвольте сказати, що стрілка являє собою один з альтернативних підходів до розгляду дат у Python. Це, головним чином, те, що я мав намір запропонувати.


17
для простого завдання, як це, чому використовувати іншу бібліотеку, коли вбудована бібліотека може це зробити просто. Звичайно, якщо користувачеві потрібна інша кількість пов'язаних {час, дата} функцій, введення нової бібліотеки має сенс.
kmonsoor

2
ти змусив мене сміятися, читаючи той другий рядок коду. як це краще, ніж print(date.today())>> "2018-12-16" ?? хай і легко отримують значення int t.year,t.month,t.day+1>> (2018, 12, 17), де t = date.today()людям не потрібно телефонувати зеленою стрілкою, щоб сказати їм час. о боже, це занадто багато коду, щоб пам’ятати ...
Калюжа

1
@Puddle: Веселий.
Білл Белл

@kmonsoor Як import datetimeвідрізняється від import arrow? Впевнений, що він вбудований, але якщо він arrowзабезпечує більш зручний формат, то чому б не використовувати його?
information_interchange

1
@information_interchange Ви вже відповіли на своє запитання. Вбудований vs ні. Якщо комусь потрібні ці зайві речі, звичайно, чому б і ні arrow? Але для багатьох простих проектів це просто непотрібно. Крім того, у багатьох внутрішніх проектах компанії, ppl потрібно отримати схвалення для включення нових бібліотек.
kmonsoor

30

Я завжди використовую isoformat()для цього функцію.

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

Зауважте, що це також працює на об'єктах дати, якщо вам також потрібен час у стандартному форматі.

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

15

Інші відповіді пропонують використовувати python's datetime.datetime, але, як сказав @Bill Bell, є й інші бібліотеки, які пропонують простіші datetimeінтерфейси або як сервіс, або як частина більшої екосистеми API. Ось дві такі бібліотеки, які роблять роботу з datetimesдуже простою.

ПАНДАС

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

import pandas as pd

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

Як об’єкт дати пітону ,

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)

Якщо ви хочете повідомити про часовий пояс Timestamp, передайте часовий пояс 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()дати безпосередньо, не виконуючи ніякої додаткової арифметики тиммеделі.

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

4

Дуже пізня відповідь, але ви можете використовувати:

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

1
дякую, це найчистіше.
Barbaros Özhan


-5

Я вважаю за краще це, тому що це просто, але, можливо, якось неефективно і баггі. Ви повинні перевірити код виходу команди оболонки, якщо ви хочете, щоб програма, яка надійно захищена від помилок.

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

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