Convert date to natural language in python?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to print date in a regular format in Python?
我想知道如何将以下日期转换为自然语言,包括Python中的时区?
输入:
1 | "'2012-09-27T02:00:00Z'" |
预期输出:
1 | Wednesday, September 26 of 2012 Mountain Time |
事先谢谢!
注释编辑:到目前为止,我试着将django人性化,尽管它不能很好地处理复杂的日期时间字符串。
解决方案:
感谢您提供所有信息。我最终解析了原始字符串,并使用了pitz和strftime,如下所示:
1 2 3 4 | 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") |
输出:
1 | 'Wednesday, September 26 of 2012' |
Babel项目提供了一个功能齐全的日期和时间本地化库。
您还需要
它可以根据区域设置设置日期和时间格式:
1 2 3 4 5 6 7 | >>> 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' |
或者让您详细指定格式。这包括格式化时区。
将分析器和格式化程序放在一起:
1 2 3 | >>> 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格式不包括这些的模式。
如果日期格式中必须有一个序号(可能是因为您只希望以英语输出),则必须自己创建这些序号:
1 2 3 4 5 6 7 8 9 | >>> 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 2 | print today.strftime('We are the %d, %h %Y') 'We are the 22, Nov 2008' |
"%"后面的所有字母表示某种格式:
- %D是日数
- %M是月份号
- %Y是最后两位数的年份
- %Y是全年
https://stackoverflow.com/a/311655
1 2 3 4 5 6 7 | 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") |
不是100%回答您的问题,但此代码可能有助于您开始格式化时间和日期:
1 2 | import datetime print datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S') |