Python 日期时间对象格式
我正在尝试使用datetime对象,包括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.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'