python - 解析多种格式的日期
问题描述
imaplib 返回的日期格式如下:
dates = [
'Mon, 27 May 2019 13:13:02 -0300 (ART)',
'Tue, 28 May 2019 00:28:31 +0800 (CST)',
'Mon, 27 May 2019 18:32:13 +0200',
'Mon, 27 May 2019 18:43:13 +0200',
'Mon, 27 May 2019 19:00:11 +0200',
'27 May 2019 18:54:58 +0100',
'27 May 2019 18:56:02 +0100',
'Mon, 03 Jun 2019 10:19:56 GMT',
'4 Jun 2019 07:46:30 +0100',
'Mon, 03 Jun 2019 18:48:01 +0200',
'5 Jun 2019 10:39:19 +0100'
]
如何将这些转换为 BST 日期时间?
这是我到目前为止所尝试的:
def date_parse(date):
try:
return datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')
except ValueError:
try:
return datetime.strptime(date[:-6], '%a, %d %b %Y %H:%M:%S %z')
except ValueError:
try:
return datetime.strptime(date[:-6], '%d %b %Y %H:%M:%S')
except ValueError:
return datetime.strptime(date[:-4], '%a, %d %b %Y %H:%M:%S')
for date in dates:
print(date)
parsed_date = date_parse(date)
print(parsed_date, type(parsed_date))
print('')
但是,我得到重复的日期,然后是一个Traceback (most recent call last):
错误。
清理这些日期的最佳方法是什么?是否有imaplib
/email
函数可以让我们自动返回干净的日期?
解决方案
parse
函数 fromdateutil.parser
做到了:
from dateutil.parser import parse
dates = [
'Mon, 27 May 2019 13:13:02 -0300 (ART)',
'Tue, 28 May 2019 00:28:31 +0800 (CST)',
'Mon, 27 May 2019 18:32:13 +0200',
'Mon, 27 May 2019 18:43:13 +0200',
'Mon, 27 May 2019 19:00:11 +0200',
'27 May 2019 18:54:58 +0100',
'27 May 2019 18:56:02 +0100',
'Mon, 03 Jun 2019 10:19:56 GMT',
'4 Jun 2019 07:46:30 +0100',
'Mon, 03 Jun 2019 18:48:01 +0200',
'5 Jun 2019 10:39:19 +0100'
]
for date in dates:
print(date, type(date))
print(parse(date), type(parse(date)))
print('')
推荐阅读
- html - Pandoc 元数据未出现在默认 HTML 模板中
- php - 获取要在 ajax 中发布的 ID
- java - 关闭 Android 的 Intent.ACTION_PICK 的页面过渡动画
- haskell - 堆栈安装可执行文件到自定义位置
- javascript - React Downshift JS全选onClick
- javascript - How to make a function that returns the factorial of each integer in an array
- spring-boot - 在 Java 中抛出的自定义异常应该在 Thymeleaf 中显示
- html - 将 html 表达式存储在变量中(Angular)
- backend - 带有 Keras 的自定义层:是否可以在基于零的 softmax 层的输出中将输出神经元设置为 0 作为输入层中的数据?
- python - 适合在 Matplotlib 中溢出外部视图的圆形补丁?