2010-08-10 163 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') 
相关问题