邮件发送时间怎么修改 python_用python解析电子邮件日期时间

在GMail中查看电子邮件时,当显示电子邮件发送的日期和时间时,将使用您的本地时区。“周二,2012年8月28日02:49:13-0500”将被解析,然后更新到本地时区,并以特定于GMail的方式格式化。

解析和格式化stdlib方式

email.utils模块包含一个^{} function,专门处理带有时区偏移的电子邮件头。

它返回与^{}兼容的元组,但添加了时区偏移量。另一个^{} function将该元组转换为偏移值(自UNIX纪元以来的秒数)。然后可以很容易地将该值转换为datetime.datetime()类型的对象。

同一模块还有一个^{} function来将UNIX epoch时间戳转换为与电子邮件兼容的日期字符串:>>> from email.utils import parsedate_tz, mktime_tz, formatdate

>>> import time

>>> date = 'Tue, 28 Aug 2012 02:49:13 -0500'

>>> tt = parsedate_tz(date)

>>> timestamp = mktime_tz(tt)

>>> print formatdate(timestamp)

Tue, 28 Aug 2012 07:49:13 -0000

现在,我们有一个格式的日期在UTC适合发送电子邮件。要将此打印为mylocal时区(由我的计算机决定),您需要将localtime标志设置为True:>>> print formatdate(timestamp, True)

Tue, 28 Aug 2012 08:49:13 +0100

使用更好的工具分析和格式化

请注意,当我们尝试处理时区时,事情变得越来越棘手,而formatdate()函数并没有给您提供任何选项来设置稍微不同的格式(就像GMail一样),也不允许您选择不同的时区。

输入外部^{} module;它有一个解析函数,可以处理几乎任何事情,并正确地支持时区>>> import dateutil.parser

>>> dt = dateutil.parser.parse(date)

>>> dt

datetime.datetime(2012, 8, 28, 2, 49, 13, tzinfo=tzoffset(None, -18000))

parse()函数返回一个^{} instance,这使得格式化更加容易。现在,我们可以使用^{} function来像您的电子邮件客户端那样输出:>>> print dt.strftime('%a, %b %d, %Y at %I:%M %p')

Tue, Aug 28, 2012 at 02:49 AM

当然,这仍然在本地时区中;要将其转换为您的时区,请使用^{} method,并使用一个新的tzone对象。这个python-dateutil包对我们来说很方便。

以下是您如何在本地时区(到您的机器)中打印它:>>> import dateutil.tz

>>> print dt.astimezone(dateutil.tz.tzlocal()).strftime('%a, %b %d, %Y at %I:%M %p')

Tue, Aug 28, 2012 at 09:49 AM

或者使用特定时区:>>> print dt.astimezone(dateutil.tz.tzstr('Asia/Kolkata')).strftime('%a, %b %d, %Y at %I:%M %p')

Tue, Aug 28, 2012 at 07:49 AM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值