首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中将日期转换为自然语言?

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

Stack Overflow用户
提问于 2012-09-25 18:12:12
回答 4查看 3.4K关注 0票数 1

可能重复: 如何用Python以常规格式打印日期?

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

投入:

代码语言:javascript
运行
复制
"'2012-09-27T02:00:00Z'"

预期产出:

代码语言:javascript
运行
复制
Wednesday, September 26 of 2012 Mountain Time

提前感谢!

注意:到目前为止,我尝试了django人性化,尽管它不能很好地处理非常复杂的日期时间字符串。

解决方案:

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

代码语言:javascript
运行
复制
    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")

输出:

代码语言:javascript
运行
复制
'Wednesday, September 26 of 2012'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-25 18:32:54

Babel项目提供了一个功能齐全的日期和时间本地化库

您还需要模块来正确地解析带有时区的日期时字符串。

它根据地区设置日期和时间的格式:

代码语言:javascript
运行
复制
>>> 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'

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

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

代码语言:javascript
运行
复制
>>> 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'

序数(“1”、“2”等)在国际上做起来有点困难,巴贝尔使用的LDML格式没有包括这些模式。

如果您的日期格式必须有序号(可能是因为您只期望以英语输出),那么您必须自己创建:

代码语言:javascript
运行
复制
>>> 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'
票数 3
EN

Stack Overflow用户

发布于 2012-09-25 18:19:27

可以使用strftime()方法获得日期的自定义字符串表示形式。strftime接受一个字符串模式,解释如何格式化您的日期。

例如:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-09-25 18:22:18

不是百分之百地回答您的问题,但是这段代码可能会帮助您开始格式化时间和日期:

代码语言:javascript
运行
复制
import datetime
print datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12588736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档