문제

파이썬에서 데이트 된 아이템에 대한 자연 시간을 보여주는 방법을 원합니다. Twitter가 "Amenter Ago", "몇 분 전", "2 시간 전", "3 일 전"의 메시지를 보여주는 방법과 마찬가지로 비슷합니다.

Django 1.0은 django.contrib에 "Humanize"방법을 가지고 있습니다. 나는 django 프레임 워크를 사용하지 않으며, 내가 있었더라도 내가 원하는 것보다 더 제한적입니다.

이미 좋은 작업 솔루션이 있는지 (및 미래의 검색 자)에게 알려주십시오. 이것은 충분히 일반적인 작업이므로 무언가가 있어야한다고 생각합니다.

도움이 되었습니까?

해결책

이 순간에 유용하지는 않지만 미래의 검색 자에게는 그렇게 될 수 있습니다. 모든 종류의 로케일을 다루는 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'

이것은 바로에서 찍은 것입니다 시간 델타 서식에 대한 바벨 문서. 이것은 최소한 당신에게 일부를 얻을 것입니다. 그것은 "순간 전"등의 수준까지 퍼지를하지 않을 것이지만, "n 분"등을 올바르게 복수화 할 것입니다.

가치가있는 바벨 모듈에는 로케일에 따라 날짜와 시간을 형식화하는 기능도 포함되어 있으며, 이는 델타가 클 때 유용 할 수 있습니다.

다른 팁

트위터의 날짜는 첫날에만 상대적이기 때문에 흥미 롭습니다. 24 시간 후에 그들은 단지 월과 날을 보여줍니다. 1 년 후 그들은 올해의 마지막 두 자리를 보여주기 시작합니다. 트위터 상대 날짜와 더 유사한 일을하는 샘플 기능은 다음과 같습니다. 그것은 미국 로케일 전용이지만 항상 필요에 따라 변경할 수 있습니다.

# 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)

거기 있습니다 인간화 패키지:

>>> 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'

또한 (위의 링크 참조) 또한 인간화를 지원합니다.

  • 정수
  • 파일 크기
  • 플로트 (분수 숫자로)

또는 쉽게 적응할 수 있습니다 Timesince.py 2 개의 다른 종속성 만있는 Django에서 : 하나는 번역 용 (필요하지 않을 수 있음)과 시간대 (쉽게 조정할 수 있음)를위한 것입니다.

그런데, Django에는 BSD 라이센스가 있습니다 매우 유연합니다. 현재 사용중인 프로젝트에서 사용할 수 있습니다.

를 찾습니까 이 같은 (파이썬에서 상대 날짜 인쇄)?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top