Convert string "Jun 1 2005 1:33PM" into datetime

Convert string “Jun 1 2005 1:33PM” into datetime

技术背景

在Python编程中,经常会遇到需要将字符串类型的日期时间转换为datetime对象的场景,例如处理日志文件、解析用户输入等。Python提供了多种方法来实现这一转换。

实现步骤

使用datetime.strptime

datetime.strptime可以按照指定的格式将输入字符串解析为一个无时区信息的datetime对象。

1
2
from datetime import datetime
datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')

使用第三方库dateutil

dateutil库的parser.parse方法能处理大多数日期格式,通常会自动猜测正确的格式。

1
2
from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")

使用time模块的strptime

time模块的strptime方法是strftime的逆操作。

1
2
3
4
5
import time
my_time = time.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
timestamp = time.mktime(my_time)
from datetime import datetime
my_datetime = datetime.fromtimestamp(timestamp)

Python 3.7+使用fromisoformat

对于符合YYYY-MM-DD格式的字符串,可以使用datetime.fromisoformat进行转换。

1
2
3
from datetime import datetime
date_string = "2012-12-12 10:10:10"
datetime.fromisoformat(date_string)

使用pandas

pandas库提供了to_datetime方法来处理日期时间转换。

1
2
3
import pandas as pd
dates = ['2015-12-25', '2015-12-26']
[d.date() for d in pd.to_datetime(dates)]

核心代码

1
2
3
4
5
6
7
8
9
10
11
# 使用datetime.strptime
from datetime import datetime
date_str = 'Jun 1 2005 1:33PM'
date_obj = datetime.strptime(date_str, '%b %d %Y %I:%M%p')
print(date_obj)

# 使用dateutil.parser
from dateutil import parser
date_str = "Aug 28 1999 12:00AM"
date_obj = parser.parse(date_str)
print(date_obj)

最佳实践

  • 如果已知日期字符串的格式,优先使用datetime.strptime,因为它的性能较好。
  • 如果日期格式不确定,使用dateutil.parser,它能自动处理多种格式,但性能相对较低。
  • 对于大量日期数据的处理,使用pandas库,它提供了高效的日期时间处理功能。

常见问题

时区问题

许多时间戳都有隐含的时区,为确保代码在每个时区都能正常工作,应在内部使用UTC时间,并在外部对象进入系统时附加时区信息。

1
2
3
4
5
6
7
8
9
import datetime
import pytz

date_str = "March 5, 2014, 20:13:50"
date_obj = datetime.datetime.strptime(date_str, "%B %d, %Y, %H:%M:%S")
tehran = pytz.timezone("Asia/Tehran")
local_time = tehran.localize(date_obj)
utc_time = local_time.astimezone(pytz.utc)
print(utc_time)

性能问题

dateutil.parserdatetime.strptime慢约90%,如果需要处理大量数据,应考虑性能因素。


Convert string "Jun 1 2005 1:33PM" into datetime
https://119291.xyz/posts/2025-05-12.convert-string-into-datetime/
作者
ww
发布于
2025年5月12日
许可协议