在 Python 中以 YYYY-MM-DD 获取今天的日期?

Getting today's date in YYYY-MM-DD in Python?

对于 YYYY-MM-DD 格式的 return 今天的日期,有没有比以下更好的方法?

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

使用strftime:

>>> from datetime import datetime
>>> datetime.today().strftime('%Y-%m-%d')
'2021-01-26'

在末尾也包含一个零填充 Hour:Minute:Second

>>> datetime.today().strftime('%Y-%m-%d %H:%M:%S')
'2021-01-26 16:50:03'

如果你喜欢记住有趣的代码,Datetime 就是个不错的选择。你不喜欢简单吗?

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

这个模块足够聪明,可以理解你的意思

就做pip install arrow.

附录:为了回答那些对这个答案感到厌烦的人,我只想说箭头代表了 替代方法 中处理 Python 中日期的方法之一。这主要是我的意思。

您可以将 datetime.date.today() and convert the resulting datetime.date 对象用于字符串:

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

我更喜欢这个,因为它很简单,但可能在某种程度上效率低下且存在错误。如果你想要一个 strongly error-proof 程序,你必须检查 shell 命令的退出代码。

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

我总是使用 isoformat() 方法。

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

请注意,这也适用于 datetime objects if you need the time in the standard ISO 8601 格式。

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

你在和 Pandas 一起工作吗?

您可以使用 pd.to_datetime from the pandas 库。这里有各种选项,具体取决于您要返回的内容。

import pandas as pd

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

作为 python 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)

如果您想让 Timestamp 知道时区,请将时区传递给 tz 参数。

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

另一个日期解析器库:Pendulum

这个很好,我保证。

如果您使用 pendulum,有一些有趣的选择。您可以使用 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'

这个答案的理由

很多 pandas 用户偶然发现了这个问题,因为他们认为这是一个 python 问题而不是 pandas 问题。这个答案旨在对已经在使用这些库并且有兴趣知道在库本身的范围内有实现这些结果的方法的人们有用。

如果您还没有使用 pandas 或 pendulum,我绝对不建议您为了 运行 这段代码而安装它们!这些图书馆很重,并且在引擎盖下有很多管道。当您可以使用标准库代替时,就不值得麻烦了。

答案很晚,但您可以简单地使用:

import time
today = time.strftime("%Y-%m-%d")
# 2022-01-30

我的代码有点复杂,但我经常使用它

strftime("%y_%m_%d", localtime(time.time()))

参考:'https://strftime.org/

你可以看看参考,做任何你想做的 对你来说 YYYY-MM-DD 只需将我的代码更改为:

strftime("%Y-%m-%d", localtime(time.time()))

这个有效:

from datetime import date
today =date.today()

本次产出:2020-08-29

附加:

this_year = date.today().year
this_month = date.today().month
this_day = date.today().day
print(today)
print(this_year)
print(this_month)
print(this_day)

要从日期中获取天数在 python

对于 example:19-12-2020(dd-mm-yyy)order_date 我们需要 19 作为输出

order['day'] = order['Order_Date'].apply(lambda x: x.day)
from datetime import datetime

date = datetime.today().date()

print(date)

如果您需要,例如您可以做的太平洋标准时间 (PST)

from datetime import datetime
import pytz

tz = pytz.timezone('US/Pacific')
datetime.now(tz).strftime('%Y-%m-%d %H:%M:%S')
# '2021-09-02 10:21:41'

使用 f-strings,它们通常是任何 text-variable 组合的最佳选择:

from datetime import date
print(f'{date.today():%Y-%m-%d}')

摘自 也有官方链接。