我想知道如何将以下日期转换为自然语言,包括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'
答案 0 :(得分:2)
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'等)在国际上有点难以做到,Babel使用的LDML format不包含这些模式。
如果必须在日期格式中有序数(可能是因为您只希望以英语输出),您必须自己创建:
>>> 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'
答案 1 :(得分:1)
您可以使用strftime()
方法获取日期的自定义字符串表示形式。 strftime接受一个字符串模式,说明您希望如何设置日期格式。
例如:
print today.strftime('We are the %d, %h %Y')
'We are the 22, Nov 2008'
“%”后的所有字母代表某种格式:
答案 2 :(得分:0)
不是100%的问题答案,但此代码可能会帮助您开始格式化时间和日期:
import datetime
print datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')
答案 3 :(得分:0)
def myFormat(dtime):
if dtime.day in [1,21,31] : ending = "st"
elif dtime.day in [2,22] : ending = "nd"
elif dtime.day in [3,23] : ending = "rd"
else : ending = "th"
return dtime.strftime("%B %d"+ ending + " of %Y")