2011-01-14 12 views
5

मैं अवधि के बाद तारीखों के साथ काम कर रहा हूँ, और पहले से ही मिल गया, उदाहरण के लिए करने के लिए अवधि के बाद सेकंड:पायथन: संबंधित तिथि

date = 6928727.56235 

ताकि मैं मैं, एक और रिश्तेदार प्रारूप में इस परिणत करना चाहते हैं युग के सापेक्ष कुछ में इसे बदलने में सक्षम हो जाएगा।

time.gmtime (तारीख) का उपयोग करना, यह

year=1970, mon=3, day=22, hour=4, min=38, sec=47 

लौटे मैं, युग में '01/01/1970 0:00:00 'शुरू होता है लगता है तो विधि की तरह कुछ में संबंधित तिथि लौटना चाहिए :

'2 months 21 days 04:38:47' 

कुछ भी जो मदद करता है?

+0

22 मार्च 04:38 2 महीने 22 दिन 04:38 नहीं है 01 जनवरी 00:00 के बाद। – eumiro

+1

नहीं, यह वास्तव में 2 महीने 21 दिन 04:38:47 है ... – eumiro

उत्तर

4
from datetime import timedelta 

a = timedelta(seconds=6928727.56235) 

# a is now datetime.timedelta(80, 16727, 562350) 

print "%d days %02d:%02d:%02d" % (a.days, a.seconds/3600, (a.seconds/60) % 60, a.seconds % 60) 

रिटर्न 80 days 04:38:47 है, जो सही है, लेकिन वास्तव में नहीं क्या ओ पी चाहता था (2 महीने 21 दिन के 80 दिनों के बजाय)।

+0

+1, मेरी गलती पहले – mouad

+0

धन्यवाद। यह समाधान मेरे लिए पर्याप्त है। "कुछ हद तक" के लिए –

1

time.gmtime एक पारसी ऑब्जेक्ट देता है और आप टुपल के अलग-अलग तत्वों का उपयोग अपनी गणना कर सकते हैं। इस

>>> time_epoch = time.gmtime(0) 
>>> time_at_hand = time.gmtime(6928727.56235) 
>>> print "It's been %d days somewhat like %d months, %d days and %d hours, %d minutes, %d seconds " % (time_at_hand.tm_yday - time_epoch.tm_yday, time_at_hand.tm_mon - time_epoch.tm_mon , time_at_hand.tm_mday - time_epoch.tm_mday, time_at_hand.tm_hour - time_epoch.tm_hour, time_at_hand.tm_min - time_epoch.tm_min, time_at_hand.tm_sec - time_epoch.tm_sec) 
It's been 80 days somewhat like 2 months, 21 days and 4 hours, 38 minutes, 47 seconds 
+0

+1। –

4

विधि की तरह कुछ में रिश्तेदार तारीख लौटना चाहिए की तरह कुछ: '2 महीने 22 दिन 04:38:47'

आप ऐसा नहीं कर सकते, क्योंकि एक महीने 28 और 31 दिनों के बीच है। "2 महीने और 22 दिन" का बयान 81 और 84 दिनों के बीच कुछ भी हो सकता है। (या 78 से 84 दिनों के बीच, अगर महीनों को लगातार नहीं होना चाहिए)।

तो आप जो चाहते हैं वह केवल बकवास है। एक सापेक्ष तारीख का समय केवल दिन, घंटों और सेकंड में गिना जा सकता है, जब तक कि अंतर इतना बड़ा न हो जाए कि दिनों की मात्रा अब मायने रखती है, इस मामले में आप महीनों या वर्षों में गिनती शुरू कर सकते हैं (लेकिन फिर आप दिनों को शामिल नहीं कर सकते अब और)।

तो आप "पांच साल और दो महीने", या "80 दिन और तीन घंटे" या "दो सौ साल" कह सकते हैं। लेकिन आप "दो महीने और तीन दिन" या "पांच साल और 20 दिन" नहीं कह सकते हैं। बयान बस कोई समझ नहीं आता है।

इसलिए, सही जवाब वास्तव में eumiros

timedelta(seconds=6928727.56235) 

है लेकिन अब आप भी क्यों पता है।

(जब तक निश्चित रूप से, आप महीने के साथ वास्तव में मतलब चाँद-चक्र है, जोएक निश्चित लंबाई है। :))

+0

इस स्पष्टीकरण के लिए धन्यवाद, और मैं अन्य वाक्यविन्यास ('दो महीने ...') के बजाय इसका उपयोग करने के बारे में सोचूंगा। आपने जो कहा वह समझ में आता है। इस जोड़ने के लिए धन्यवाद। –

+0

@ गेब्रियल एल ओलिविरा: सामान्य रूप से, [एक दिन 86400 (एसआई?) सेकेंड नहीं है] (http: // stackoverflow।कॉम/ए/20335352/4279) ठीक है जब तक कि हम POSIX समय (आपके प्रश्न द्वारा उल्लिखित) के बारे में बात नहीं कर रहे हैं जो यूटीसी से अलग है। इसलिए "दिन + सेकंड + माइक्रोसॉन्ड" जितना अधिक समझ में आता है "महीनों + दिन" यानी, यदि आप अनदेखा कर सकते हैं (अपने विशेष मामले में) 86400 और 86401 (मिलियन माइक्रोसेकंड) या 28 और 31 (तीन के बीच अंतर) दिन) संगत रूप से। – jfs

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