我想将这些日期解析为datetime对象:
以下将适用于第一个日期:
datetime.strptime("December 12th, 2008", "%B %dth, %Y")
Run Code Online (Sandbox Code Playgroud)
但由于日期编号('st')的后缀,第二次会失败.那么,strptime中是否存在无证的通配符?还是一个更好的方法?
我可以使用输出区域敏感时间格式strftime('%X'),但这总是包括秒.如何在没有秒的情况下显示此时间格式?
>>> import locale
>>> import datetime
>>> locale.setlocale(locale.LC_ALL, 'en_IE.utf-8')
'en_IE.utf-8'
>>> print datetime.datetime.now().strftime('%X')
12:22:43
>>> locale.setlocale(locale.LC_ALL, 'zh_TW.utf-8')
'zh_TW.utf-8'
>>> print datetime.datetime.now().strftime('%X')
12?22?58?
Run Code Online (Sandbox Code Playgroud)
我能想到这样做的唯一方法是尝试解析输出locale.nl_langinfo(locale.T_FMT)并删除秒位,但这带来了它自己的诡计.
>>> print locale.nl_langinfo(locale.T_FMT)
%H?%M?%S?
>>> locale.setlocale(locale.LC_ALL, 'en_IE.utf-8')
'en_IE.utf-8'
>>> print locale.nl_langinfo(locale.T_FMT)
%T
Run Code Online (Sandbox Code Playgroud)
(根据pixelbeat的回答.)
# -*- coding: utf-8 -*-
import locale
def locale_time(t, show_seconds=False):
if show_seconds:
return t.strftime('%X')
replacement_fmts = [
(u'.%S', u''),
(u':%S', u''),
(u',%S', u''),
(u':%OS', ''),
(u'?????%S', u''),
(u' %S?', u''),
(u'%S?', u''),
(u'%r', '%I:%M %p'),
(u'%t', '%H:%M'),
(u'%T', …Run Code Online (Sandbox Code Playgroud)