2012-05-17 11 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

@Wobie - あなたは正しいです。私はそれを試していなかった... – mgilson

答えて

5

実際はかなりシンプルです。欠けていた機能でした。

これは、Python 3.xの機能として追加された点です。

2.x3.xのサポートされている操作表の違いに注意してください。

+1

ありがとう。私はそれがうまくいきませんでした。私はそれの背後に合理的なものがあるかどうか疑問に思っていました。 Python 3.xで動作するので、私はあなたが正しいと仮定し、単なる見落としに過ぎませんでした。ありがとう。 – mgilson

+2

さて、それを床にして、もう一度やり直してください! *含み笑い。 – jpaugh

+0

3.2以降、すべての3.x情報のちょっとした点... –

2

非常に興味深い - 私はあまりにも動作することを期待していたでしょう。私はちょうどPython 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

これは、Python 3.xの機能とは別に、Python 3.xでは 'Delta divided浮動小数点またはintで指定します。その結果は、半減期を使用してtimedelta.resolutionの最も近い倍数に丸められます。](http://docs.python.org/py3k/library/datetime.html) '解決策ではありません。しかし、それでもなお役に立ちます。 –

+0

フェアコール - これを修正するための編集提案はできないと思いますか? (これは十分単純だと仮定すると、これは大した問題ではないと考えても十分であると思う。) –

関連する問題