Python中的电子邮件日期转换



我正在捕获电子邮件到电子邮件日期的标题,格式如下:

Fri, 27 Mar 2020 12:05:17 +0000 (UTC)

我需要转换为格式:YYYY-MM-DD HH:MM

我尝试使用datetime.strptime函数,但没有成功。

有人能帮我吗?当我现在开始学习Python时,我受到了打击!

我会使用python dateutil将字符串转换为datetime对象,然后使用strftime输出所需格式的字符串。

import datetime
from dateutil import parser
x = parser.parse("Fri, 27 Mar 2020 12:05:17 +0000 (UTC)")
print(x.strftime("%Y-%m-%d %H:%M"))

输出应该是

2020-03-27 12:05

如果不需要依赖关系,则不使用datetime库的自定义实现。

date_given = "Fri, 27 Mar 2020 12:05:17 +0000 (UTC)"
month ={'Jan':'01','Feb':'02','Mar':'03','Apr':'04','May':'05','Jun':'06','Jul':'07','Aug':'08','Sep':'09','Oct':'10','Nov':'11','Dec':'12'}
_,d,m,y,t,_,_ = date_given.split(' ')
print(str(y)+"-"+str(month[m])+'-'+str(d)+' '+str(t[:-3]))

会给你2020-03-27 12:05

标准库的电子邮件包提供了解析RFC5322格式日期时间字符串的工具。

from email.headerregistry import DateHeader
kwds = {}   # This dict is modified in-place
DateHeader.parse('Fri, 27 Mar 2020 12:05:17 +0000 (UTC)', kwds)
kwds['datetime']
datetime.datetime(2020, 3, 27, 12, 5, 17, tzinfo=datetime.timezone.utc)

虽然DateHeader是解析日期标头的现代工具,但传统的*函数email.utils.parsedate_to_datetime更容易使用

from email.utils import parsedate_to_datetime
parsedate_to_datetime('Fri, 27 Mar 2020 12:05:17 +0000 (UTC)')
datetime.datetime(2020, 3, 27, 12, 5, 17, tzinfo=datetime.timezone.utc)

*对于传统API标题下的utils模块,DateHeader内部使用parsedate_to_datatime来解析日期时间字符串,因此它可能不会很快消失。

最新更新