gpt4 book ai didi

python - 在Python中将日期转换为自然语言?

转载 作者:行者123 更新时间:2023-11-30 23:40:31 30 4
gpt4 key购买 nike

Possible Duplicate:
How to print date in a regular format in Python?

我想知道如何将以下日期转换为自然语言,包括python中的时区?

输入:

"'2012-09-27T02:00:00Z'"

预期输出:

Wednesday, September 26 of 2012 Mountain Time

提前致谢!

注释编辑:到目前为止我尝试过django humanize ,尽管它不能很好地处理复杂的日期时间字符串。

解决方案:

感谢您提供的所有信息。我最终解析了原始字符串并使用 pitz 和 strftime,如下所示:

    my_date = '2012-09-27T02:00:00Z'
utc_date_object = datetime(int(my_date[0:4]), int(my_date[5:7]), int(my_date[8:10]),int(my_date[11:13]),int(my_date[14:16]),int(my_date[17:19]),0,pytz.utc)
mt_date_object = utc_date_object.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Mountain'))
natural_date = mt_date_object.strftime("%A, %B %d of %Y")

输出:

'Wednesday, September 26 of 2012'

最佳答案

Babel project提供全功能date and time localization library .

您还需要 iso8601 module正确解析带有时区的日期时间字符串。

它根据区域设置格式化日期和时间:

>>> from datetime import date, datetime, time
>>> from babel.dates import format_date, format_datetime, format_time
>>> d = date(2007, 4, 1)
>>> format_date(d, locale='en')
u'Apr 1, 2007'
>>> format_date(d, locale='de_DE')
u'01.04.2007'

或者让您详细指定格式。这包括格式化时区。

将解析器和格式化器放在一起:

>>> dt = iso8601.parse_date("2012-08-25T02:00:00Z")
>>> format_date(dt, "MMMM dd, yyyy", locale='en') + ' at ' + format_time(dt, "HH:mm V")
u'August 25, 2012 at 02:00 World (GMT) Time'

序数词(“1st”、“2nd”等)在国际上有点难做到,LDML format Babel 使用的不包含这些模式。

如果您必须在日期格式中包含序数(可能是因为您只希望以英语输出),则必须自己创建它们:

>>> suffix = ('st' if dt.day in [1,21,31]
... else 'nd' if dt.day in [2, 22]
... else 'rd' if dt.day in [3, 23]
... else 'th')
>>> u'{date}{suffix}, {year} at {time}'.format(
... date=format_date(dt, "MMMM dd", locale='en'),
... suffix=suffix, year=dt.year,
... time=format_time(dt, "HH:mm V"))
u'August 25th, 2012 at 02:00 World (GMT) Time'

关于python - 在Python中将日期转换为自然语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588736/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com