2012-05-17 5 views
6
>>> import datetime 
>>> now1 = datetime.datetime.now() 
>>> now2 = datetime.datetime.now() 
>>> timedelta = now2-now1 
>>> halfdt = timedelta/2 #This works just fine 
>>> halfdt = timedelta/2. #TypeError: unsupported operand type(s) for /: 'datetime.timedelta' and 'float' 

timedeltas가 정수로 나눌 수 있도록 허용하는 것이 합리적인지 아는 사람이 있습니까?왜 datetime.timedelta를 float으로 나눌 수 없습니까?

+2

FWIW는 Py3K에서 잘 작동합니다. – geoffspear

+0

@ 우비 - 네 말이 맞아. 나는 그걸 시도하지 않았다 ... – mgilson

답변

5

실제로는 매우 간단합니다. 누락 된 기능이었습니다.

위의 단점은 Python 3.x의 기능으로 추가 된 것입니다.

2.x3.x의 지원되는 작업 테이블 간의 차이점에 유의하십시오.

+1

고마워. 나는 그것이 작동하지 않을 때 방금 바닥 났으며, 그 뒤에 합리적인 것이 있는지 궁금해하고있었습니다. 파이썬 3.x에서 작동하기 때문에, 나는 당신이 옳았다 고 가정 할 것이고 그것은 단지 감독 일 뿐이다. 감사. – mgilson

+2

글쎄, 바닥에 그것을 다시 시도하십시오! *킬킬 웃음. – jpaugh

+0

3.2 이상, 모든 3.x 정보의 한 점 ... –

2

매우 흥미 롭습니다 - 나는 또한 그렇게 일할 것으로 기대했을 것입니다. 방금 파이썬 2.x에서 수행하는 몇 가지 예제/doctest를 사용하여 함수를 작성했습니다. 또한 ActiveState recipe으로 게시 :

import datetime 

def divide_timedelta(td, divisor): 
    """Python 2.x timedelta doesn't support division by float, this function does. 

    >>> td = datetime.timedelta(10, 100, 1000) 
    >>> divide_timedelta(td, 2) == td/2 
    True 
    >>> divide_timedelta(td, 100) == td/100 
    True 
    >>> divide_timedelta(td, 0.5) 
    datetime.timedelta(20, 200, 2000) 
    >>> divide_timedelta(td, 0.3) 
    datetime.timedelta(33, 29133, 336667) 
    >>> divide_timedelta(td, 2.5) 
    datetime.timedelta(4, 40, 400) 
    >>> td/0.5 
    Traceback (most recent call last): 
     ... 
    TypeError: unsupported operand type(s) for /: 'datetime.timedelta' and 'float' 

    """ 
    # timedelta.total_seconds() is new in Python version 2.7, so don't use it 
    total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 1e6)/1e6 
    divided_seconds = total_seconds/float(divisor) 
    return datetime.timedelta(seconds=divided_seconds) 

if __name__ == '__main__': 
    import doctest 
    doctest.testmod() 
+0

파이썬 3.x는 '델타 분할'을 통해 알 수있는 것처럼 이것이 파이썬 3.x의 기능과 다르다는 점은 주목할 가치가있다. float 또는 int에 의해. 결과는 round-to-even을 사용하여 timedelta.resolution의 가장 가까운 배수로 반올림됩니다.] (http://docs.python.org/py3k/library/datetime.html) ' 해상도이므로 드롭 인 대체품이 아닙니다. 그러나 여전히 유용합니다. –

+0

공정한 전화 -이 문제를 해결하기 위해 수정 제안을 제안 할 수는 없습니까? (충분히 간단하다고 가정 할 때, 이것은별로 중요하지 않은 엣지 케이스로 충분하다고 생각합니다.) –

관련 문제