将包含月份名称的字符串转换为日期时间格式

26

我正在使用pickadate.js,它以以下格式返回日期:

8 March, 2017

我想将这个转换成以下的datetime格式:

yyyy-mm-dd

用Python最好的方法是什么?


3
您可以配置pickadate.js以其他格式显示日期,例如:$('.datepicker').pickadate({formatSubmit: 'yyyy-mm-dd'}); - Mark Reed
2个回答

59

在Python中,使用datetime格式字符串进行此操作非常容易:

from datetime import datetime

s = "8 March, 2017"
d = datetime.strptime(s, '%d %B, %Y')
print(d.strftime('%Y-%m-%d'))

请参考此表格以获得所有格式限定符的详细描述。

在这里,我使用datetime.strptime方法将你的datepicker.js字符串转换为Python datetime对象。然后我使用.strftime方法,使用你想要的格式打印该对象作为字符串输出。一开始这些格式字符串可能很难记住,但你可以随时查询它们,而且它们组织得很好,最终会变得容易记忆。

不过,我在想:与其切换到Python进行最后一步操作,还不如继续使用JavaScript是否更好?当然,如果你在流程的其他地方已经在使用Python,那么这是一个简单的解决方案。


3
格式说明符A/aB/b分别代表星期和月份,因为当两者同时指定时,它们通常按照这个顺序出现。在这两种情况下,小写字母表示缩写,大写字母表示全名。 - Mark Reed
1
我的控制器是Python编写的,因此我更喜欢Python解决方案而不是JavaScript。感谢您的回答! - Arjun
并且扩展:s = "8-Mar-2017, 23:42:42.314"d = datetime.strptime(s, '%d-%b-%Y, %H:%M:%S.%f') - uhoh

11

在你的情况下,Mark Reed的建议可能是最好的。一个常常被忽视的日期的替代方法是箭头模块,它提供了一些有趣的功能。在这种情况下,你可以这样做:

>>> import arrow
>>> arrow.get('8 March, 2017', 'D MMMM, YYYY').format('YYYY-MM-DD')
'2017-03-08'

作为一个特性的例子,如果您捕获了那个日期,您可以将其格式化为俄语。
>>> aDate = arrow.get('8 March, 2017', 'D MMMM, YYYY')
>>> aDate.format('YYYY MMMM DD', locale='ru')
'2017 марта 08'

1
谢谢,我之前不熟悉这个模块。这是一种非常好的格式化日期的方式。 - pawelty
1
那其实是一个非常有趣的模块!谢谢。 - Arjun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接