2012-07-24 93 views
6

我正在嘗試使用datetime對象,包括datetime.month,datetime.daydatetime.hourdatetime對象格式

問題是這些對象(比如說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。

+0

你會發現'08'不是Python中的一個值。如果要打印它們,請使用strftime,而不是單個屬性。 – geoffspear 2012-07-24 18:50:07

+0

Python中的值不包含格式。打印輸出或將其轉換爲字符串時,需要指定格式。 – 2012-07-24 18:55:08

+0

@MarkRansom如上所述,如果我使用這些對象的字符串格式,它們被定義爲(含月份)爲1到12。 – ehertele 2012-07-24 19:05:15

回答

21

可以使用字符串格式化打印個別屬性:

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')) 

將很好地替換您編輯的代碼。

+0

對'strftime'的+1,但在第一個例子中,我認爲'str.format'比'%'運算符更受歡迎? – 2012-07-24 18:59:31

+0

@RicardoAltamirano - 我經常使用C語言,所以每次我想要使用它時,我仍然需要重新學習'.format'。我已更新。 – mgilson 2012-07-24 19:01:37

+0

不用擔心;我只是想確保,因爲我總是使用'str.format'來代替'%'。我正要爲我的答案添加'strftime',但由於它已經很好地涵蓋在你的答案中,所以我只想澄清一點,並將答案保留爲主答案。 – 2012-07-24 19:03:31

2

可以將它們轉換爲字符串,然後簡單地墊他們:

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.yeardate.monthdate.day,但目前還不清楚。你在用len(str)進行什麼操作?

+0

似乎很難去解決這個問題,但由於它確實有效,所以你會從我那裏得到一個令牌+1。 – 2012-07-24 18:56:21

+0

@MarkRansom誠然,這有點難,但是我注意到'strftime'在我發佈之前已經被覆蓋了,所以我想我會覆蓋那些不是。 – 2012-07-24 19:08:45