2013-01-31 10 views
9

से कम है, यदि यह घना है तो पहले से खेद है। मैं आखिरी बार एक ट्वीट पोस्ट करने के बाद से दिन ढूंढने की कोशिश कर रहा हूं। जिस समस्या में मैं दौड़ रहा हूं वह यह है कि जब तिथियां अलग होती हैं, उदाहरण के लिए, आज और कल, लेकिन पर्याप्त दिन पूरे "दिन" के लिए पास नहीं हुए हैं।पायथन में "दिन" निर्धारित करते समय timedelta.days एक

# "created_at" is part of the Twitter API, returned as UTC time. The 
# timedelta here is to account for the fact I am on the west coast, USA 
lastTweetAt = result.created_at + timedelta(hours=-8) 

# get local time 
rightNow = datetime.now() 

# subtract the two datetimes (which gives me a timedelta) 
dt = rightNow - lastTweetAt 

# print the number of days difference 
print dt.days 

समस्या यह है कि अगर मैं एक ट्वीट पोस्ट में कल का कहना है कि 5 पीएम और सुबह 8 बजे आज स्क्रिप्ट चला रहा हूँ, केवल 15 घंटे बीत चुके हैं, जो 0 दिन है। लेकिन जाहिर है, मैं कहना चाहता हूं कि यह कल आखिरी ट्वीट के बाद से 1 दिन रहा है। और "+1" जोड़ने का एक झुकाव मदद नहीं करेगा क्योंकि अगर मैंने आज ट्वीट किया है, तो मैं परिणाम 0

क्या अंतर पाने के लिए टाइमडेल्टा का उपयोग करने से बेहतर दृष्टिकोण है?


समाधान मेटी लिरा

द्वारा प्रदान की जवाब तो वे (timestamps के बिना) मोटे तारीख वस्तुओं में बदल दिए जाते datetimes पर() .date कॉल करने के लिए है।

# "created_at" is part of the Twitter API, returned as UTC time. 
# the -8 timedelta is to account for me being on the west coast, USA 
lastTweetAt = result.created_at + timedelta(hours=-8) 

# get UTC time for right now 
rightNow = datetime.now() 

# truncate the datetimes to date objects (which have dates, but no timestamp) 
# and subtract them (which gives me a timedelta) 
dt = rightNow.date() - lastTweetAt.date() 

# print the number of days difference 
print dt.days 
+0

क्या पर 'dt.seconds' तो देख क्या बुराई है? –

+0

मैन्युअल रूप से टाइमज़ोन को प्रबंधित करने से बचने के लिए 'rightNow = datetime.utcnow()' का प्रयास करें (मान लें कि आपके पास सही स्थानीय समय/टाइमज़ोन सेटिंग्स हैं) – SingleNegationElimination

+0

। सेकंड्स मदद नहीं करता क्योंकि मैं ट्वीट्स के बीच _days_ जानना चाहता हूं। अगर मैं 11 बजे ट्वीट करता हूं और स्क्रिप्ट को 1 बजे (2 घंटे बाद) चलाता हूं तो मैं "1" वापस लौटना चाहता हूं। लेकिन अगर मैं 1 बजे एक ट्वीट पोस्ट करता हूं और 3 बजे स्क्रिप्ट चलाता हूं, तो मुझे एक "0" लौटाया जाता है। .seconds के रूप में एक ही समस्या होने के लिए .days। utcnow() ठीक है, लेकिन क्या मैं ट्वीट के समय को अपने स्थानीय समय में बदलता हूं या अपना स्थानीय समय यूटीसी में बदलता हूं, वह सिर्फ छह में से एक दर्जन दर्जन है। – psxndc

उत्तर

8

आप datetime.date() का उपयोग दो तिथियों तुलना करने के लिए कर सकते हैं (ध्यान दें: नहीं समय के साथ दिनांक) इस datetime ट्रंकेटस नहीं दिनों घंटे के रिज़ॉल्यूशन के लिए की तरह सही कोड लग रहा है।

... 
# subtract the two datetimes (which gives me a timedelta) 
dt = rightNow.date() - lastTweetAt.date() 
... 

डॉक्स हमेशा अपने दोस्त हैं

http://docs.python.org/2/library/datetime#datetime.datetime.date

+0

गह, मैं वास्तव में इसे पोस्ट करने के बीच में था ... +1 –

+0

बिल्कुल याद रखने की कोशिश कर रहा था ... लंबा दिन। +1 – isedev

+0

अहह्ह - वहां हम जाते हैं। मैं यूटीसी बनाम स्थानीय मुद्दे के बारे में बहुत चिंतित था, मैंने विचार नहीं किया - और मेरा मानना ​​है कि मैंने दस्तावेज़ों को देखा, मैं कसम खाता हूँ! - मेरे पास सही तिथियां होने के बाद वापस एक कोरसर ग्रैन्युलरिटी में परिवर्तित हो गया। धन्यवाद!! – psxndc

5

कैसे सिर्फ अपने datetimes की "तिथि" भाग के साथ काम कर के बारे में?

"0" निम्नलिखित कोड में outputing के बाद वाले हिस्से:

>>> a = datetime.datetime.now() 
>>> b = datetime.datetime.now() - datetime.timedelta(hours=20) 
>>> (a-b).days 
0 
>>> b.date() - a.date() 
datetime.timedelta(-1) 
>>> (b.date() - a.date()).days 
-1 
+0

यह सहायक था। धन्यवाद! – psxndc

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