मेरे पास एक पायथन datetime.datetime
ऑब्जेक्ट है। एक दिन घटाने का सबसे अच्छा तरीका क्या है?
मेरे पास एक पायथन datetime.datetime
ऑब्जेक्ट है। एक दिन घटाने का सबसे अच्छा तरीका क्या है?
जवाबों:
आप समयबद्ध वस्तु का उपयोग कर सकते हैं :
from datetime import datetime, timedelta
d = datetime.today() - timedelta(days=days_to_subtract)
timedelta(minutes=12)
उदाहरण के लिए इसका उपयोग किया है ।
import datetime as DT; DT.datetime.today()
पायथन 2 और 3 पर काम करता है। यह इसके बराबर है DT.datetime.now()
।
यदि आपकी पायथन डेटाइम ऑब्जेक्ट समय-अवगत है, तो आपको डीएसटी बदलाव (या अन्य कारणों से यूटीसी ऑफसेट में परिवर्तन) के आसपास त्रुटियों से बचने के लिए सावधान रहना चाहिए:
from datetime import datetime, timedelta
from tzlocal import get_localzone # pip install tzlocal
DAY = timedelta(1)
local_tz = get_localzone() # get local timezone
now = datetime.now(local_tz) # get timezone-aware datetime object
day_ago = local_tz.normalize(now - DAY) # exactly 24 hours ago, time may differ
naive = now.replace(tzinfo=None) - DAY # same time
yesterday = local_tz.localize(naive, is_dst=None) # but elapsed hours may differ
सामान्य तौर पर, day_ago
और yesterday
अगर अंतिम समय में स्थानीय समय क्षेत्र के लिए यूटीसी ऑफसेट बदल गया हो तो अलग हो सकता है।
उदाहरण के लिए, दिन के समय की बचत / गर्मी का समय Sun 2-Nov-2014 को सुबह 02:00:00 बजे अमेरिका / Los_Angeles timezone पर समाप्त होता है इसलिए यदि:
import pytz # pip install pytz
local_tz = pytz.timezone('America/Los_Angeles')
now = local_tz.localize(datetime(2014, 11, 2, 10), is_dst=None)
# 2014-11-02 10:00:00 PST-0800
तब day_ago
और yesterday
अलग:
day_ago
ठीक 24 घंटे पहले (सापेक्ष now
) लेकिन सुबह 11 बजे है, सुबह 10 बजे नहींnow
yesterday
कल सुबह 10 बजे है लेकिन यह 25 घंटे पहले (सापेक्ष now
), 24 घंटे नहीं है।pendulum
मॉड्यूल इसे स्वचालित रूप से संभालता है:
>>> import pendulum # $ pip install pendulum
>>> now = pendulum.create(2014, 11, 2, 10, tz='America/Los_Angeles')
>>> day_ago = now.subtract(hours=24) # exactly 24 hours ago
>>> yesterday = now.subtract(days=1) # yesterday at 10 am but it is 25 hours ago
>>> (now - day_ago).in_hours()
24
>>> (now - yesterday).in_hours()
25
>>> now
<Pendulum [2014-11-02T10:00:00-08:00]>
>>> day_ago
<Pendulum [2014-11-01T11:00:00-07:00]>
>>> yesterday
<Pendulum [2014-11-01T10:00:00-07:00]>
बस एक वैकल्पिक विधि और एक केस केस को विस्तृत करने के लिए जिसके लिए यह उपयोगी है:
from datetime import datetime, timedelta print datetime.now() + timedelta(days=-1) # Here, I am adding a negative timedelta
from datetime import datetime, timedelta print datetime.now() + timedelta(days=5, hours=-5)
यह इसी तरह अन्य मापदंडों जैसे सेकंड, सप्ताह आदि के साथ उपयोग किया जा सकता है
इसके अलावा सिर्फ एक और अच्छा कार्य है जिसका उपयोग मैं तब करना चाहता हूं जब मैं गणना करना चाहता हूं अर्थात पिछले महीने का पहला / अंतिम दिन या अन्य रिश्तेदार समय-समय पर ... आदि।
डेटुलेट फंक्शन से रिलेटेडवेलेटा फंक्शन ( डेटाइम लीब के लिए एक शक्तिशाली एक्सटेंशन)
import datetime as dt
from dateutil.relativedelta import relativedelta
#get first and last day of this and last month)
today = dt.date.today()
first_day_this_month = dt.date(day=1, month=today.month, year=today.year)
last_day_last_month = first_day_this_month - relativedelta(days=1)
print (first_day_this_month, last_day_last_month)
>2015-03-01 2015-02-28