像在这里问的其他问题一样,我希望做一个简单的时间格式转换。我在Perl中找到了如何做到这一点的答案,但在Python中却没有。
我有一个像这样的字符串:
on Jun 03, 02010 at 10:22PM
我想将它转换为这样的日期时间对象:
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 :(得分: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
如果你能以某种方式去掉讨厌的'on'并将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
开头并使用前缀为零的四位数年份,则可以使用
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 strftime
和strptime
使用同名机器的C函数。因此,请查看您当地的手册页,了解您的机器可用的格式代码。有关格式代码的一般列表(可能可用),请参阅http://au2.php.net/strftime。
答案 1 :(得分: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
现在我们可以struct_time
t
,我们可以
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
位),因此它不会出现在结果中。
答案 2 :(得分:1)
我很懒,所以我可能会使用strptime和strftime:
date = strptime(dateString, 'on %b %d, %Y at %I:%M%p')
date.strftime('%a, %d %b %H:%M:%S %z')