将12小时日期/时间字符串转换为24小时日期时间

时间:2010-08-10 21:46:06

标签: python datetime time

像在这里问的其他问题一样,我希望做一个简单的时间格式转换。我在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}吗?

3 个答案:

答案 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 strftimestrptime使用同名机器的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')