अजगर का समय + समयबद्धता समतुल्य


80

मैं ऐसा कुछ करने की कोशिश कर रहा हूँ:

time() + timedelta(hours=1)

हालाँकि, पाइथन इसकी अनुमति नहीं देता है , जाहिरा तौर पर अच्छे कारण के लिए।

क्या किसी के पास एक साधारण काम है?

सम्बंधित:

जवाबों:


138

समाधान आपके प्रश्न में दिए गए लिंक में है :

datetime.combine(date.today(), time()) + timedelta(hours=1)

पूर्ण उदाहरण:

from datetime import date, datetime, time, timedelta

dt = datetime.combine(date.today(), time(23, 55)) + timedelta(minutes=30)
print dt.time()

आउटपुट:

00:25:00

4
यह अप्रासंगिक सूचनाओं द्वारा डेटा को बढ़ाने के लिए काम के आसपास थोड़ा सा महसूस करता है। यदि today()डेलाइट सेविंग टाइम पर स्विच करने से पहले दिन होता है, और समयसीमा अलग-अलग समय क्षेत्र में विस्तारित होती है तो क्या होता है? क्या यह कोड स्थानों से प्रभावित है?
bluenote10

1
@ bluenote10 एक भोली डेटाइम ऑब्जेक्ट माइक्रोसेकंड की सिर्फ एक पूर्णांक संख्या है जो कि प्रलेपिटिक ग्रेगोरियन कैलेंडर के अनुसार टूट गया है। दूसरे शब्दों में, किसी भी स्थानीय समय क्षेत्र में डीएसटी बदलाव के दौरान, उत्तर में कोड भी काम करता है। date.today()का उपयोग सकारात्मक और नकारात्मक दोनों समय-समय पर करने के लिए किया जाता है। date.minसकारात्मक समयबद्धता के लिए काम करेगा।
7

@JFSebastian: यह आश्वस्त है, अद्यतन के लिए धन्यवाद। यह अभी भी मुझे कमज़ोर बनाता है यदि एक फ़ंक्शन जिसे शुद्ध माना जाता है उसका साइड इफेक्ट होता है। वर्ष 9999 के लोग इसे पसंद नहीं करेंगे;)
bluenote10

3
@ bluenote10 व्यावहारिकता शुद्धता को हरा देती है। मुझे संदेह datetime.MAXYEARहै कि 9999 में 9999 रहेगा।
जेएफ

10

यदि यह आपकी परियोजना में एक और फ़ाइल / निर्भरता जोड़ने के लायक है, तो मैंने सिर्फ एक छोटा सा वर्ग लिखा है जो datetime.timeअंकगणित करने की क्षमता के साथ विस्तारित होता है। यदि आप आधी रात को जाते हैं, तो यह चारों ओर घूमता है:

>>> from nptime import nptime
>>> from datetime import timedelta
>>> afternoon = nptime(12, 24) + timedelta(days=1, minutes=36)
>>> afternoon
nptime(13, 0)
>>> str(afternoon)
'13:00:00'

यह PyPi से nptime("गैर-पांडित्य समय"), या GitHub पर उपलब्ध है: https://github.com/tgs/nptime

प्रलेखन http://tgs.github.io/nptime/ पर है


महान। यह डेटाइम वर्ल्ड और बैक में जाने के राउंड ट्रिप को बचाता है।
जोशुआ चिया

6

यह थोड़ा बुरा है, लेकिन:

from datetime import datetime, timedelta

now = datetime.now().time()
# Just use January the first, 2000
d1 = datetime(2000, 1, 1, now.hour, now.minute, now.second)
d2 = d1 + timedelta(hours=1, minutes=23)
print d2.time()

1
+1: datetimeमॉड्यूल के लिए। अन्यथा इसे अतिप्रवाह त्रुटियों और ऐसे मैन्युअल रूप से निपटने की आवश्यकता होगी।
JFS

6

वर्कअराउंड:

t = time()
t2 = time(t.hour+1, t.minute, t.second, t.microsecond)

आप माइक्रोसेकंड को भी छोड़ सकते हैं, अगर आपको उतनी सटीकता की आवश्यकता नहीं है।


हाँ, अच्छा जवाब। मुझे इसे और पेचीदा बनाना चाहिए, जैसे: समय () + समयसीमा (मिनट = 30)
एंटोनियस कॉमन

6
यदि t == time(23,59)तब यह दृष्टिकोण काम नहीं करेगा। जब आप जोड़ते 1हैं t.hourतो आपको मिलेगाValueError: hour must be in 0..23
jfs

वाक्यविन्यास त्रुटि को ठीक किया। 23:59 मामले के लिए सवाल यह है कि गणना का वास्तविक उद्देश्य क्या है, आप वास्तव में उस मामले में क्या परिणाम प्राप्त करना चाहते हैं। मैंने मान लिया कि इसे उसी दिन रहना चाहिए (या कोई त्रुटि देनी चाहिए), अन्यथा आप आमतौर पर पहली बार में ही डेटाइम होंगे ...
sth

1
इस पद्धति ने मेरे लिए एक त्रुटि का कारण बना दिया क्योंकि मैं 1 दिन को 31 अक्टूबर तक जोड़ रहा था। यह इस कारण से है कि आपको datetime.timedelta(days=1)एक दिन को एक डेटाइम ऑब्जेक्ट में जोड़ने के लिए उपयोग करना चाहिए । आप डिबग भूमि से बचेंगे।
बोबोर्ट

2

आप इसे काम करने के लिए समय () से लेकर अब () तक बदल सकते हैं

from datetime import datetime, timedelta
datetime.now() + timedelta(hours=1)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.