在Python中将日期转换为自然语言?
在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'
admin 更改状态以发布 2023年5月21日
使用strftime()
方法可以获取您日期的自定义字符串表示。strftime接受一个字符串模式,用于说明您希望如何格式化您的日期。
例如:
print today.strftime('We are the %d, %h %Y') 'We are the 22, Nov 2008'
"%"后面的所有字母都代表某个格式:
- %d代表天数
- %m代表月份
- %y代表年份的最后两位
- %Y代表整个年份
你还需要iso8601
模块,以正确解析带有时区的日期时间字符串。
它根据语言环境格式化日期和时间:
>>> 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'等)在国际上有点难以做到,Babel使用的LDML格式不包含这些模式。
如果你必须在日期格式中使用序数(可能因为你只期望用英语输出),那么你就必须自己创建:
>>> 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'