Python 日期时间对象格式

Python 日期时间对象格式,python,Python,我正在尝试使用datetime对象,包括datetime.month、datetime.day和datetime.hour 问题是这些对象(比如datetime.month)的值为1、2、3,依此类推到12。相反,我需要这些格式为01、02、03,依此类推到12。在几天和几个月内也有类似的问题 如何切换到这种格式 我意识到这不是一个很清楚的问题: 我使用字符串格式来打印带有时间戳的字典中的值 因此,表达式大致如下: print "%s-%s-%s"%(date.year, date.month

我正在尝试使用datetime对象,包括
datetime.month
datetime.day
datetime.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。

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

print ('%02d' % (mydate.month))
或更新的字符串格式(在python 2.6中引入):

请注意,即使:

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

或者使用datetime对象的方法:

print (mydate.strftime('%m'))
为了完整起见:

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

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

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

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.month
,和
date.day
,但不清楚。您使用
len(str)
执行什么操作?

更容易记住:

In [19]: str(dt.month).zfill(2)
Out[19]: '07'

您会发现,
08
在python中不是一个值。如果要打印它们,请使用strftime,而不是单个属性。python中的值不包含格式。打印或转换为字符串时需要指定格式。@MarkRansom如上所述,如果我对这些对象使用字符串格式,它们是定义的(含月份)为1到12。@ehertele请查看我的答案。您刚才发布的代码甚至不会运行,因此您说“我的值最初的格式正确”时的确切含义有点不清楚。“您更改了什么使其崩溃?@RicardoAltamirano我的意思是,对%s和对象datetime对象使用字符串格式可以得到单数值(如1到12)这就是它们的定义。当然,我的代码不会运行,因为它不是实际的代码。不过,谢谢你的帮助。这似乎是一个艰难的过程,但因为它确实有效,你会从我这里得到一个+1的令牌。@MarkRansom True,这是一个有点艰难的过程,但因为我注意到
strftime
在我发布之前就已经被覆盖了ed,我想我会为strftime覆盖那些没有的+1,但是在你的第一个例子中,我认为str.format比
%
操作符更受欢迎?@RicardoAltamirano--是的,我仍然经常使用C,所以每次我想使用它时我仍然需要重新学习
.format
。我已经更新了。不用担心,我只是想为了确保这一点,因为我总是使用
str.format
来代替
%
。我本来打算在我的答案中添加
strftime
,但因为你的答案已经很好地涵盖了这一点,所以我只想澄清这一点,并将你的答案作为主要答案。@RicardoAltamirano——在阅读文档时,我了解到
“{:%m}”。format(mydate)
也可以。非常整洁。使用
%02d
而不是
&s
正是我想要的。谢谢。(很抱歉,上面的内容不清楚,没有用……对我来说是麻布和灰烬)
In [19]: str(dt.month).zfill(2)
Out[19]: '07'