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


325

我在用着:

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

YYYY-MM-DD格式返回今天的日期。

有没有那么简单的方法可以做到这一点?


3
“粗鲁”是什么意思?
Gombat 2015年

4
也许这个?\ n now = datetime.datetime.now()\ n str(now.strftime(“ Y-%m-%d”)
Gombat 2015年

3
@Gombat我的意思是根据我的经验,通常有一种内置的方式来获取我们想要的东西,而无需拆分,索引,concat,join等
。– Pyderman 2015年

Answers:


601

您可以使用strftime

from datetime import datetime

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

此外,对于任何还在末尾寻找零填充的小时,分​​钟和秒的人:(Gabriel Staples评论)

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

也很有可能“%x”可以工作...但这取决于语言环境
Joran Beasley 2015年

19
对于还在末尾寻找零填充的小时,分​​钟和秒的任何人:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples

怎么样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
@StevenVascellaro,它将是date.today().strftime('%Y/%m/%d')
kmonsoor

2
@StevenVascellaro不好的主意。读者通常假定分隔符.为'DMY',分隔符/M/D/Y,分隔符-Y-M-D。尽管并非每个人都遵循这些准则,但只要不是每个人都改用,它会有助于在国际上阅读日期Y-M-D
glglgl

1
@glglgl我正在使用一个假定美国日期格式为m / d / y的api。我已经在我的应用程序中更改了顺序。
Stevoisiak

1
@glglgl是的,我使用的是m / d / y
Stevoisiak,

35

如果您想记住有趣的代码,那么日期时间就是很好的选择。您不喜欢简单吗?

>>> 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” 更好??大声笑并轻松获得int值t.year,t.month,t.day+1>>(2018,12,17)在哪里t = date.today(),事实是人们不必调用绿色箭头来告诉他们时间。哦,天哪,这是太多代码了,难以记住...
Puddle

1
@Puddle:热闹。
比尔·贝尔

@kmonsoor import datetime与有import arrow什么不同?当然是内置的,但是如果arrow提供了更方便的格式,那为什么不使用它呢?
information_interchange

1
@information_interchange您已经回答了您的问题。内置与否。如果有人需要这些多余的东西,那为什么arrow呢?但是,对于许多简单的项目,这是不必要的。同样,在许多公司内部项目中,ppl需要获得包括新库在内的批准。
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非常简单。

潘达斯

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

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)

如果要使您的时间戳记时区知道,请将时区传递给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

如果您使用的是熊猫并且不想转换为str,则pd.to_datetime(day).date()很有用。谢谢!
Brndn

4

答案很晚,但是您可以使用:

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

1
谢谢,这是最干净的一个。
BarbarosÖzhan6


-5

我喜欢这个,因为这很简单,但是可能效率不高且有问题。如果您要一个高度防错的程序,则必须检查shell命令的退出代码。

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

4
仅应将其用于检查系统日期命令将返回的内容,而不是实际格式化日期。除了退出代码检查外,这还有几个原因。1.不便携。Windows上的date命令设置日期2。效率低下。它必须创建一个完整的shell,然后必须对其进行解析,查找和执行命令,返回输出,然后销毁该shell3。这完全是非Python的-它表明您不了解知名的基础库,并且可能还会误导使用该代码的语言的新手
莱普顿船长
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.