当前位置:  开发笔记 > 编程语言 > 正文

Python中的自然/相对天数

如何解决《Python中的自然/相对天数》经验,为你挑选了5个好方法。

我想用一种方法在Python中显示日期项目的自然时间.类似于Twitter将如何显示"片刻之前","几分钟前","两小时前","三天前"等消息.

Django 1.0在django.contrib中有一个"humanize"方法.我没有使用Django框架,即使我是,它比我想要的更有限.

请让我(以及几代未来的搜索者)知道是否已经有一个好的工作解决方案.由于这是一个很常见的任务,我想必须有一些东西.



1> Josh Segall..:

具体的Twitter日期很有趣,因为它们仅在第一天才相对.24小时后,他们只显示月和日.一年后,他们开始显示一年中的最后两位数字.这是一个示例函数,可以执行更类似于Twitter相对日期的操作,但它总是在24小时后显示年份.它只是美国语言环境,但您可以随时根据需要进行更改.

# tested in Python 2.7
import datetime
def prettydate(d):
    diff = datetime.datetime.utcnow() - d
    s = diff.seconds
    if diff.days > 7 or diff.days < 0:
        return d.strftime('%d %b %y')
    elif diff.days == 1:
        return '1 day ago'
    elif diff.days > 1:
        return '{} days ago'.format(diff.days)
    elif s <= 1:
        return 'just now'
    elif s < 60:
        return '{} seconds ago'.format(s)
    elif s < 120:
        return '1 minute ago'
    elif s < 3600:
        return '{} minutes ago'.format(s/60)
    elif s < 7200:
        return '1 hour ago'
    else:
        return '{} hours ago'.format(s/3600)



2> runeh..:

虽然在这个时刻对你没用,但对于未来的搜索者来说可能是这样的:babel模块,处理各种语言环境的东西,具有做或多或少你想要的功能.目前它只在他们的主干中,而不是在最新的公开发布(版本0.9.4).一旦功能进入发布版,您可以执行以下操作:

from datetime import timedelta
from babel.dates import format_timedelta
delta = timedelta(days=6)
format_timedelta(delta, locale='en_US')
u'1 week'

这是直接从关于时间增量格式的babel文档中获取的.这至少可以帮助你完成部分工作.它不会模糊到"片刻之前"这样的水平,但它会做"n分钟"等正确复数.

对于它的价值,babel模块还包含根据区域设置格式化日期和时间的功能,这在时间增量很大时可能很有用.



3> sevenforce..:

有人性化的包装:

>>> import humanize
>>> import datetime
>>> humanize.naturalday(datetime.datetime.now())
'today'
>>> humanize.naturalday(datetime.datetime.now() - datetime.timedelta(days=1))
'yesterday'
>>> humanize.naturalday(datetime.date(2007, 6, 5))
'Jun 05'
>>> humanize.naturaldate(datetime.date(2007, 6, 5))
'Jun 05 2007'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=1))
'a second ago'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=3600))
'an hour ago'

用例示例:

>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=36000))
'10 hours ago'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=360000))
'4 days ago'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=3600000))
'a month ago'

进一步(见上面的链接)它还支持人性化:

整数

文件大小

浮点数(到小数)



4> lpfavreau..:

或者你可以很容易地从Django 调整timesince.py,它只有2个其他的依赖关系:一个用于翻译(你可能不需要)和一个用于时区(可以很容易地适应).

顺便说一句,Django有一个非常灵活的BSD许可证,你可以在你目前正在使用的任何项目中使用它.



5> lpfavreau..:

你在寻找这样的东西(用Python打印相对日期)吗?

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有