答案 0 :(得分:0)
请注意,我尚未研究所有可用的库,只是想为其他人提供解决问题的起点。
在所有示例中,我将使用以下本地化字符串:
dt_str = "Thu 3 Apr 2014 13:19:52" # en_US
这是最简单的方法,但是如果使用默认语言环境以外的语言环境,它将变得笨拙。
可以在here中找到有关语法的信息。
import datetime
dt = datetime.datetime.strptime(dt_str,
"%a %d %b %Y %H:%M:%S")
# datetime.datetime(2014, 4, 3, 13, 19, 52)
s = dt.strftime("%a %-d %b %Y %H:%M:%S")
# 'Thu 3 Apr 2014 13:19:52'
如果您想解析或格式化其他语言环境,则必须更改全局语言环境,这可能会导致不良的副作用。 (我不推荐这种方法。)
import datetime
import locale
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8")
dt = datetime.datetime.strptime("Do 3 Apr 2014 13:19:52",
"%a %d %b %Y %H:%M:%S")
# datetime.datetime(2014, 4, 3, 13, 19, 52)
s = dt.strftime("%a %-d %b %Y %H:%M:%S")
# 'Do 3 Apr 2014 13:19:52'
arrow允许您传递语言环境(否则使用“ en_US”)。
import arrow # installed via pip
import datetime
### localized string -> datetime
a_dt = arrow.get(dt_str,
"ddd D MMM YYYY H:mm:ss",
locale="en_US") # "en_US" is also the default, so this is just for clarification
dt = a_dt.datetime
# datetime.datetime(2014, 4, 3, 13, 19, 52, tzinfo=tzutc())
### datetime -> localized string
a_s = arrow.get(datetime.datetime(2014, 5, 17, 14, 0, 0))
s = a_s.format("ddd D MMM YYYY H:mm:ss",
locale="en_US") # "en_US" is also the default, so this is just for clarification
# 'Sat 17 May 2014 14:00:00'
如果所需的语言环境与默认语言环境不同,这特别有用。
babel的优势在于格式(很遗憾,it can not parse any pattern。Only the format "short" seems reliable。)
import babel.dates # 'babel' installed via pip
import datetime
dt = datetime.datetime(2014, 4, 3, 13, 19, 52)
# parsing is the problem with babel, therefore I created the datetime object directly.
s = babel.dates.format_datetime(dt,
"EEE d MMM yyyy H:mm:ss",
locale="en_US")
# 'Thu 3 Apr 2014 13:19:52'
dateparser非常强大。它能够以较长的文本查找日期,并且仅支持一些功能,并且确实支持非格里高利历系统。
import dateparser # installed via pip
dt = dateparser.parse(dt_str,
date_formats=["%a %d %b %Y %H:%M:%S"],
languages=["en"])
# datetime.datetime(2014, 4, 3, 13, 19, 52)
以下值得注意的python库具有强大的功能,但不幸的是,我无法将它们用于此特定问题(或不知道如何正确使用它们)。