13

我正在尝试使用日期时间对象,包括datetime.monthdatetime.daydatetime.hour.

问题是这些对象(比如datetime.month)将值作为 1、2、3 等赋予 12。相反,我需要这些格式为 01、02、03 等到 12。天数和个月。

我怎样才能切换到这种格式?


我意识到这不是一个非常明确的问题:

我正在使用字符串格式来打印带有时间戳的字典中的值。

所以,表达式大致是:

print "%s-%s-%s"%(date.year, date.month, date.day, etc., len(str) )

我的值最初采用正确的"%Y-%m-%d形式(例如 2000-01-01)。使用上述内容,我得到 2000-1-1。

4

3 回答 3

30

您可以使用字符串格式打印各个属性:

print ('%02d' % (mydate.month))

或者更新的字符串格式(在 python 2.6 中引入):

print ('{0:02d}'.format(a.month))  # python 2.7+ -- '{:02d}' will work

请注意,即使:

print ('{0:%m}'.format(a))  # python 2.7+ -- '{:%m}' will work.

将工作。

或者使用 datetime 对象的strftime方法:

print (mydate.strftime('%m'))

只是为了完整起见:

print (mydate.strftime('%Y-%m-%d')) 

将很好地替换您编辑中的代码。

于 2012-07-24T18:51:10.107 回答
1

您可以将它们转换为字符串并简单地填充它们:

import datetime

d = datetime.datetime(2012, 5, 25)

m = str(d.month).rjust(2, '0')
print(m) # Outputs "05"

或者你可以只是一个str.format

import datetime

d = datetime.datetime(2012, 5, 25)

print("{:0>2}".format(d.month))

编辑:要回答更新后的问题,您尝试过吗?

import datetime
d = datetime.datetime(2012, 5, 25)
print("{:0>4}-{:0>2}-{:0>2}".format(d.year, d.month, d.day))

您说您最初使用字符串格式打印它们,那么您更改了什么?这段代码:

print "%s-%s-%s"%(date.year, date.month, date.day, etc., len(str) )

没有任何意义,因为我有点不清楚你传入的参数。我假设只是date.year,date.monthdate.day,但不清楚。你在执行什么动作len(str)

于 2012-07-24T18:54:12.220 回答
1

zfill更容易记住:

In [19]: str(dt.month).zfill(2)
Out[19]: '07'
于 2020-08-16T15:23:23.070 回答