2010-08-10 128 views
1

像其他問題一樣在這裏問,即時通訊尋找做一個簡單的時間格式轉換。我已經找到了如何在Perl中執行此操作的答案,但在Python中未找到答案。轉換12小時日期/時間字符串爲24小時datetime

我有一個字符串,像這樣:

on Jun 03, 02010 at 10:22PM 

,我想將其轉換爲datetime對象是這樣的:

Thu, 03 Jun 2010 22:22:00 -0000 

我已經瓜分我的輸入,像這樣:

date = str(comment.div.contents[5].contents) 
month = date[6:9] 
day = date[10:12] 
year = date[15:19] 
time = date[23:30] 

它給我一些很好的變量,我可以扔回到日期時間,但在我之前,我必須轉換時間。在上面的例子中,我應該劃分time並分別計算hh{AM|PM}

+0

我想你必須忽視制度本身缺乏明確的 - HTTP://en.wikipedia .org/wiki/Post_meridiem#Confusion_at_noon_and_midnight – relet 2010-08-10 21:53:25

+1

非常感謝您的回答。我給了〜Ubuntu的意見,但是幹事和穆罕默德阿爾卡魯裏也同樣有幫助。謝謝。 – Flowpoke 2010-08-11 20:18:22

回答

4

使用dateutil

import datetime as dt 
import dateutil.parser as dparser 

date_str='on Jun 03, 02010 at 10:22PM' 
date=dparser.parse(date_str) 
print(date) 
# 2010-06-03 22:22:00 
print(date.strftime('%a, %d %b %Y %H:%M:%S')) 
# Thu, 03 Jun 2010 22:22:00 

如果你能以某種方式去掉討厭的 '上',並更改02010至2010年,在date_str那麼你可以使用dt.datetime.strptime

date_str='Jun 03, 2010 at 22:22PM' 
date=dt.datetime.strptime(date_str,'%b %d, %Y at %H:%M%p') 
print(date) 
# 2010-06-03 22:22:00 

或者,作爲Muhammad Alkarouri points out ,如果date_str始終以on開頭並使用以0開頭的四位數年份,則可以使用

date_str='on Jun 03, 02010 at 22:22PM' 
date=dt.datetime.strptime(date_str,'on %b %d, 0%Y at %H:%M%p') 
print(date) 
# 2010-06-03 22:22:00 

Python的strftimestrptime使用您的機器的同名C函數。因此,請檢查您的本地手冊頁,瞭解適用於您的機器的格式代碼。有關格式代碼的一般列表(可能可用),請參閱http://au2.php.net/strftime

2

您可能更喜歡使用標準庫,即time.strptime

特別是你提到的時間可以被轉換成一個像time.struct_time的這麼

In [9]: time.strptime("on Jun 03, 02010 at 10:22PM", "on %b %d, 0%Y at %I:%M%p") 

Out[9]: time.struct_time(tm_year=2010, tm_mon=6, tm_mday=3, tm_hour=22, tm_min=22, tm_sec=0, tm_wday=3, tm_yday=154, tm_isdst=-1) #store in variable t 

現在,我們已經在tstruct_time我們可以做

In [14]: time.strftime('%a, %d %b %H:%M:%S %z', t) 

Out[14]: 'Thu, 03 Jun 22:22:00 ' 

注意,區您在"Thu, 03 Jun 22:22:00 -0000"-0000位)中所需的信息不是由第一種格式提供的,因此它不會出現在結果中。

1

我很懶惰,所以我可能會使用strptime和strftime:

date = strptime(dateString, 'on %b %d, %Y at %I:%M%p') 
date.strftime('%a, %d %b %H:%M:%S %z') 
相關問題