2012-05-17 15 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' 

क्या कोई व्यक्ति केवल समयबद्धता को पूर्णांक द्वारा विभाजित करने की अनुमति देने के लिए तर्कसंगत जानता है?मैं एक फ्लैट द्वारा डेटाटाइम.timedelta क्यों विभाजित नहीं कर सकता?

+2

FWIW, Py3K में ठीक काम करता है। – geoffspear

+0

@Woobie - आप सही हैं। मैंने कोशिश नहीं की थी ... – mgilson

उत्तर

5

यह वास्तव में बहुत आसान है - यह एक गायब विशेषता थी।

इसका उल्टा यह है कि इसे पायथन 3.x में एक सुविधा के रूप में जोड़ा गया है।

2.x और 3.x में समर्थित ऑपरेशन टेबल के बीच अंतर को नोट करें।

+1

धन्यवाद। जब मैं काम नहीं करता था तब मैं बस फर्श लगा था, और मैं सोच रहा था कि इसके पीछे कोई तर्कसंगत था या नहीं। चूंकि यह पायथन 3.x में काम करता है, मुझे लगता है कि आप सही हैं और यह सिर्फ एक निरीक्षण था। धन्यवाद। – mgilson

+2

अच्छा, इसे मंजिल करें, और पुनः प्रयास करें! * व्यंग्य। – jpaugh

+0

3.2 और बाद में, सभी 3.x नहीं, जानकारी का एक बिंदु ... –

2

बहुत रोचक - मुझे उम्मीद है कि यह भी काम करेगी। मैंने अभी कुछ उदाहरण/सिद्धांतों के साथ एक समारोह लिखा है जो इसे पायथन 2.x में करता है। 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 करता है '[डेल्टा विभाजित एक फ्लोट या एक int द्वारा। परिणाम timedelta.resolution के निकटतम एकाधिक तक गोल-आधा-से-भी तक का उपयोग करके गोल किया जाता है।] (Http://docs.python.org/py3k/library/datetime.html) ', और आपका उपयोग नहीं करता है संकल्प, तो यह काफी ड्रॉप-इन प्रतिस्थापन नहीं है। फिर भी उपयोगी, हालांकि, +1। –

+0

मेला कॉल - मुझे नहीं लगता कि आप इसे ठीक करने के लिए संपादन का सुझाव दे सकते हैं? (मान लीजिए कि यह काफी आसान है - मुझे लगता है कि यह एक बढ़िया मामला है कि इससे शायद कोई फर्क नहीं पड़ता।) –

संबंधित मुद्दे