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

2024-10-19 14:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

像这里问的其他问题一样,我想做一个简单的时间格式转换。我在Perl中找到了如何做到这一点的答案,但在Python中没有。

我有一根这样的绳子:

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]

这就给我设置了一些很好的变量,我可以把它们扔回datetime,但是在我这样做之前,我必须转换时间。在上面的例子中,我是否应该将time分开,分别计算hh{AM|PM}


Tags: 对象答案datetimedatetimeon格式contents
3条回答

我很懒,所以我可能会用strtime和strftime:

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

使用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

如果你能在date_str中去掉讨厌的“on”并将02010更改为2010,那么你可以使用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_strs总是以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

您可能更适合使用标准库,即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)中所需的区域信息不是由第一种格式提供的,因此不会出现在结果中。

相关问题 更多 >