পাইথনের তারিখ থেকে এক মাস বিয়োগ করার সহজ উপায় কী?


103

যদি কেবল টাইমডেল্টার এটির কনস্ট্রাক্টরে এক মাসের তর্ক থাকে। সুতরাং এটি করার সহজ উপায় কি?

সম্পাদনা: নীচের দিকে ইঙ্গিত করা হয়েছে আমি এ সম্পর্কে খুব কঠিন চিন্তা ছিল না। সত্যিই আমি যা চেয়েছিলাম তা গত মাসে যে কোনও দিন ছিল কারণ অবশেষে আমি কেবল বছর এবং মাস ধরে চলেছি। একটি ডেটটাইম অবজেক্ট দেওয়া হয়েছে, আগের মাসে পড়ে যে কোনও ডেটটাইম অবজেক্ট ফেরত দেওয়ার সহজ উপায় কী?

উত্তর:


64

এটা চেষ্টা কর:

def monthdelta(date, delta):
    m, y = (date.month+delta) % 12, date.year + ((date.month)+delta-1) // 12
    if not m: m = 12
    d = min(date.day, [31,
        29 if y%4==0 and (not y%100==0 or y%400 == 0) else 28,
        31,30,31,30,31,31,30,31,30,31][m-1])
    return date.replace(day=d,month=m, year=y)

>>> for m in range(-12, 12):
    print(monthdelta(datetime.now(), m))

    
2009-08-06 16:12:27.823000
2009-09-06 16:12:27.855000
2009-10-06 16:12:27.870000
2009-11-06 16:12:27.870000
2009-12-06 16:12:27.870000
2010-01-06 16:12:27.870000
2010-02-06 16:12:27.870000
2010-03-06 16:12:27.886000
2010-04-06 16:12:27.886000
2010-05-06 16:12:27.886000
2010-06-06 16:12:27.886000
2010-07-06 16:12:27.886000
2010-08-06 16:12:27.901000
2010-09-06 16:12:27.901000
2010-10-06 16:12:27.901000
2010-11-06 16:12:27.901000
2010-12-06 16:12:27.901000
2011-01-06 16:12:27.917000
2011-02-06 16:12:27.917000
2011-03-06 16:12:27.917000
2011-04-06 16:12:27.917000
2011-05-06 16:12:27.917000
2011-06-06 16:12:27.933000
2011-07-06 16:12:27.933000
>>> monthdelta(datetime(2010,3,30), -1)
datetime.datetime(2010, 2, 28, 0, 0)
>>> monthdelta(datetime(2008,3,30), -1)
datetime.datetime(2008, 2, 29, 0, 0)

দিনটি পরিচালনা করার জন্যও সম্পাদনা করা হয়েছে।

সম্পাদনা এছাড়াও ধাঁধা থেকে উত্তর দেখুন যা জন্য একটি সহজ গণনা নির্দেশ করে d:

d = min(date.day, calendar.monthrange(y, m)[1])

আমার যদি এটি সঠিকভাবে ((date.month+delta-1) % 12)+1কাজ করে এবং এর অর্থ if not m: m = 12মুছে ফেলা যায়
চার্লস এল

@ ড্যান-ক্লাসন কি আপনি বিস্তারিত বলতে পারবেন?
জিন-ফ্রান্সোইস ফ্যাব্রে

@ জিন-ফ্রেঞ্চোইস ফ্যাবরে প্রথমটি সহজ নয়। এছাড়াও, ডেটটাইম এবং টাইমডেল্টা সহ যে কেউ সহজেই এটি করতে পারে।
ড্যান-ক্লাসন

হ্যাঁ, ওপি সম্পাদনার পরে এটি স্পষ্ট হয়ে গেছে যে তারা যা চায় তা কেবলমাত্র dt - timedelta(days=dt.day)মূল শব্দটির দ্বারা সম্পন্ন করা যেতে পারে যদিও এটি মনে হয়েছিল যে তারা মাসের একটি স্বেচ্ছাসেবী সংখ্যাকে বিয়োগ করতে সক্ষম হতে চেয়েছিল এবং এটি কিছুটা শক্ত।
ডানকান

আমি মনে করি লিপ বছরের জন্য গণনাটি ভুল - এটি হওয়া উচিত 29 if y%4==0 and (not y%100==0 or y%400 == 0) else 28। উদাহরণস্বরূপ 1600 একটি লিপ বছর যখন 1700 নয়
শন লোয়েভেন

190

আপনি তৃতীয় পক্ষের dateutilমডিউলটি ব্যবহার করতে পারেন (পাইপআই প্রবেশ এখানে )।

import datetime
import dateutil.relativedelta

d = datetime.datetime.strptime("2013-03-31", "%Y-%m-%d")
d2 = d - dateutil.relativedelta.relativedelta(months=1)
print d2

আউটপুট:

2013-02-28 00:00:00

আমি PARAM সঙ্গে গুলিয়ে ফেলা করছি monthএবং monthsdateutil হবে। পরমের সাথে বিয়োগ monthকাজ করে না তবে monthsকাজ করে In [23]: created_datetime__lt - relativedelta(months=1) Out[23]: datetime.datetime(2016, 11, 29, 0, 0, tzinfo=<StaticTzInfo 'Etc/GMT-8'>) In [24]: created_datetime__lt - relativedelta(month=1) Out[24]: datetime.datetime(2016, 1, 29, 0, 0, tzinfo=<StaticTzInfo 'Etc/GMT-8'>)
সিমিন জি

4
@ সিমিনজি: আমি মনে করি ব্যবহারটি months1 মাসের ব্যবধান তৈরি করবে। monthইনপুট মাস নির্বিশেষে ব্যবহার করে মাসটি 1 এ নির্ধারণ করা হবে (যেমন জানুয়ারী)।
ফ্র্যাঙ্ক মুলিউনার

71

"পূর্ববর্তী মাসে যে কোনও তারিখের সময় অবজেক্টে" মূল প্রশ্নের সম্পাদনার পরে, আপনি মাসের প্রথম দিন থেকে 1 দিন বিয়োগ করে খুব সহজেই এটি করতে পারেন।

from datetime import datetime, timedelta

def a_day_in_previous_month(dt):
   return dt.replace(day=1) - timedelta(days=1)

4
আপনি ব্যবহার করতে পারেনdt.replace(day=1) - timedelta(1)
jfs

4
বাdt - timedelta(days=dt.day)
সের্গেইকোলস্নিকভ

25

একটি ভেক্টরাইজড, পান্ডাস দ্রবণ খুব সহজ:

df['date'] - pd.DateOffset(months=1)


ধন্যবাদ! এটি আমাকে আমার তারিখের সেট / থেকে সহজেই একমাসে / সংযোজন করতে সহায়তা করে!
ম্যাটিউস দা সিলভা

আপনি যদি ব্যবহার করতে পারেন তবে এটি দুর্দান্ত pandas। ধন্যবাদ!
ইগোরকফ

24

ডানকানের উত্তরের একটি পরিবর্তন (মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই), যা মাসের শেষ দিনের গণনা নাটকীয়ভাবে সরল করতে ক্যালেন্ডার.মনথ্রেঞ্জ ব্যবহার করে:

import calendar
def monthdelta(date, delta):
    m, y = (date.month+delta) % 12, date.year + ((date.month)+delta-1) // 12
    if not m: m = 12
    d = min(date.day, calendar.monthrange(y, m)[1])
    return date.replace(day=d,month=m, year=y)

পাইথনে মাসের শেষ দিন থেকে মাসরেঞ্জ সম্পর্কিত তথ্য


17

যদি কেবল টাইমডেল্টার এটির কনস্ট্রাক্টরে এক মাসের তর্ক থাকে। সুতরাং এটি করার সহজ উপায় কি?

আপনি 30 মার্চ তারিখের একটি তারিখ থেকে বলুন যে কোনও তারিখ বাদ দিয়ে আপনি কী চান? মাসগুলি যোগ বা বিয়োগের ক্ষেত্রে এটাই সমস্যা: মাসের বিভিন্ন দৈর্ঘ্য হয়! কিছু প্রয়োগে এই ক্ষেত্রে ব্যতিক্রম উপযুক্ত, অন্যদের ক্ষেত্রে "আগের মাসের শেষ দিন" ব্যবহার করা ঠিক আছে (তবে এটি সত্যই পাগল পাটিগণিত, যখন একটি মাস বিয়োগ করার পরে একটি মাস যোগ করা মোটেও অপারেশন নয়!) , অন্যগুলিতে আপনি এখনও তারিখটি ছাড়াও এই সত্য সম্পর্কে কিছু ইঙ্গিত রাখতে চাইবেন, যেমন, "আমি 28 ফেব্রুয়ারী বলছি তবে আমি আসলেই থাকতাম 30 ফেব্রুয়ারী এটি চাইলে", যাতে আরও এক মাস যুক্ত করা বা বিয়োগ করা যায় এটি ঠিক আবার জিনিসগুলি সেট করতে পারে (এবং পরবর্তীকালে অবশ্যই একটি ডেটা প্লাস s / জিনিস রাখার জন্য একটি কাস্টম শ্রেণীর প্রয়োজন হয়)।

সমস্ত অ্যাপ্লিকেশনগুলির জন্য সহনীয় কোন সত্য সমাধান হতে পারে না এবং এই জঘন্য ক্রিয়াকলাপটির শব্দার্থক শব্দগুলির জন্য আপনার নির্দিষ্ট অ্যাপের প্রয়োজনীয়তাগুলি কী তা আপনি আমাদের জানাননি, তাই আমরা এখানে সরবরাহ করতে পারার মতো আরও অনেক বেশি সাহায্য নেই।


তুমি একেবারেই সঠিক. এটির জন্য একটি যুক্তি থাকার সময়কালীন সময় নিয়ে মজা করছিল। আমি অবাক হয়েছি যদি একই যুক্তিটি কয়েক ঘন্টা বা মিনিটের জন্য যুক্তি না রাখার জন্য প্রযোজ্য। প্রযুক্তিগতভাবে কোনও দিন ঠিক 24 ঘন্টা হয় না।
বিয়্লেকি

পিএইচপি 28 ফেব্রুয়ারিতে 2 দিন যোগ করে এটি পরিচালনা করে এবং এটি ২ য় মার্চে যায়। এর জন্য সম্মেলনগুলি রয়েছে, আমাকে সেগুলি
সত্যই

আপনি যদি মুদ্রা বিনিময়য়ের জন্য তারিখগুলি গণনা করেন তবে এটি আরও বেশি আকর্ষণীয় হয়ে উঠবে: উদাহরণস্বরূপ আপনার ভবিষ্যতে 3 বা 6 মাসের তারিখের প্রয়োজন হতে পারে তবে এটি উভয় দেশে কার্যদিবস হতে হবে (মোসলেম দেশগুলিতে শুক্রবার নয়) এবং কোনও দেশে ব্যাঙ্কের ছুটি নয়।
ডানকান

@ বিলেকিকি: datetimeমডিউলগুলি ধরে নিয়েছে যে একটি দিন হুবহু 24 ঘন্টা (কোনও লিপ সেকেন্ড নেই)
জেএফএস

9

আমি মনে করি সহজ উপায় হ'ল ডান্ডঅফসেটটি পান্ডাদের কাছ থেকে এভাবে ব্যবহার করা:

import pandas as pd
date_1 = pd.to_datetime("2013-03-31", format="%Y-%m-%d") - pd.DateOffset(months=1)

ফলাফলটি ডেটটাইম অবজেক্ট হবে


4
এটি সর্বাধিক স্বজ্ঞাত সমাধান
কট

6

যদি আপনি যা চান কেবল সর্বশেষ মাসের যে কোনও দিন, আপনি যে কাজটি করতে পারেন তা হ'ল বর্তমান তারিখ থেকে দিনের সংখ্যা বিয়োগ করা, যা আপনাকে আগের মাসের শেষ দিনটি দেবে।

উদাহরণস্বরূপ, যে কোনও তারিখ দিয়ে শুরু:

>>> import datetime                                                                                                                                                                 
>>> today = datetime.date.today()                                                                                                                                                   
>>> today
datetime.date(2016, 5, 24)

আমরা যে বর্তমান তারিখ পেয়েছি তার বিয়োগগুলি:

>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)

এটি গত মাসে আপনার যে কোনও দিনের সরলিকৃত প্রয়োজনের জন্য যথেষ্ট।

তবে এখন এটি আপনার কাছে রয়েছে, আপনি যে কোনও দিন দিয়ে শুরু করেছিলেন (ie মাসের কম-বেশি একই মাসকে বিয়োগ করার মতো) সহ আপনি মাসে কোনও দিনও পেতে পারেন:

>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)

অবশ্যই, আপনাকে 30 দিনের মাসে বা ফেব্রুয়ারী থেকে নিখোঁজ দিনগুলিতে 31 তম সতর্কতা অবলম্বন করা উচিত (তবে লিপ বছরগুলি যত্ন নিন) তবে এটি করাও সহজ:

>>> a_date = datetime.date(2016, 3, 31)                                                                                                                                             
>>> last_day_previous_month = a_date - datetime.timedelta(days=a_date.day)
>>> a_date_minus_month = (
...     last_day_previous_month.replace(day=a_date.day)
...     if a_date.day < last_day_previous_month.day
...     else last_day_previous_month
... )
>>> a_date_minus_month
datetime.date(2016, 2, 29)

1

আমি এটি সরকারী আর্থিক বছরগুলিতে ব্যবহার করি যেখানে Q4 1 লা অক্টোবর থেকে শুরু হয়। নোট আমি তারিখটি কোয়ার্টারে রূপান্তর করি এবং পাশাপাশি এটি পূর্বাবস্থায় ফেরাও।

import pandas as pd

df['Date'] = '1/1/2020'
df['Date'] = pd.to_datetime(df['Date'])              #returns 2020-01-01
df['NewDate'] = df.Date - pd.DateOffset(months=3)    #returns 2019-10-01 <---- answer

# For fun, change it to FY Quarter '2019Q4'
df['NewDate'] = df['NewDate'].dt.year.astype(str) + 'Q' + df['NewDate'].dt.quarter.astype(str)

# Convert '2019Q4' back to 2019-10-01
df['NewDate'] = pd.to_datetime(df.NewDate)

1

গত মাসে শেষ দিন:

>>> import datetime
>>> datetime.datetime.now() - datetime.timedelta(days=datetime.datetime.now().day)
datetime.datetime(2020, 9, 30, 14, 13, 15, 67582)

গত মাসে একই দিনে ফিরে আসে:

>>> x = datetime.datetime.now() - datetime.timedelta(days=datetime.datetime.now().day)
>>> x.replace(day=datetime.datetime.now().day)
datetime.datetime(2020, 9, 7, 14, 22, 14, 362421)

0

এটি করতে কিছু কোড এখানে । নিজে চেষ্টা করে দেখিনি ...

def add_one_month(t):
    """Return a `datetime.date` or `datetime.datetime` (as given) that is
    one month earlier.

    Note that the resultant day of the month might change if the following
    month has fewer days:

        >>> add_one_month(datetime.date(2010, 1, 31))
        datetime.date(2010, 2, 28)
    """
    import datetime
    one_day = datetime.timedelta(days=1)
    one_month_later = t + one_day
    while one_month_later.month == t.month:  # advance to start of next month
        one_month_later += one_day
    target_month = one_month_later.month
    while one_month_later.day < t.day:  # advance to appropriate day
        one_month_later += one_day
        if one_month_later.month != target_month:  # gone too far
            one_month_later -= one_day
            break
    return one_month_later

def subtract_one_month(t):
    """Return a `datetime.date` or `datetime.datetime` (as given) that is
    one month later.

    Note that the resultant day of the month might change if the following
    month has fewer days:

        >>> subtract_one_month(datetime.date(2010, 3, 31))
        datetime.date(2010, 2, 28)
    """
    import datetime
    one_day = datetime.timedelta(days=1)
    one_month_earlier = t - one_day
    while one_month_earlier.month == t.month or one_month_earlier.day > t.day:
        one_month_earlier -= one_day
    return one_month_earlier

0

একটি (বছর, মাস) টিউপল দেওয়া হয়েছে, যেখানে মাস 1-12 থেকে যায়, এটি চেষ্টা করুন:

>>> from datetime import datetime
>>> today = datetime.today()
>>> today
datetime.datetime(2010, 8, 6, 10, 15, 21, 310000)
>>> thismonth = today.year, today.month
>>> thismonth
(2010, 8)
>>> lastmonth = lambda (yr,mo): [(y,m+1) for y,m in (divmod((yr*12+mo-2), 12),)][0]
>>> lastmonth(thismonth)
(2010, 7)
>>> lastmonth( (2010,1) )
(2009, 12)

ধরে নিও যে প্রতি বছর 12 মাস আছে।


0
def month_sub(year, month, sub_month):
    result_month = 0
    result_year = 0
    if month > (sub_month % 12):
        result_month = month - (sub_month % 12)
        result_year = year - (sub_month / 12)
    else:
        result_month = 12 - (sub_month % 12) + month
        result_year = year - (sub_month / 12 + 1)
    return (result_year, result_month)

>>> month_sub(2015, 7, 1)    
(2015, 6)
>>> month_sub(2015, 7, -1)
(2015, 8)
>>> month_sub(2015, 7, 13)
(2014, 6)
>>> month_sub(2015, 7, -14)
(2016, 9)

0

আমি নির্দিষ্ট কোড থেকে n মাস পিছনে ফিরে যেতে নিম্নলিখিত কোডটি ব্যবহার করেছি:

your_date =  datetime.strptime(input_date, "%Y-%m-%d")  #to convert date(2016-01-01) to timestamp
start_date=your_date    #start from current date

#Calculate Month
for i in range(0,n):    #n = number of months you need to go back
    start_date=start_date.replace(day=1)    #1st day of current month
    start_date=start_date-timedelta(days=1) #last day of previous month

#Calculate Day
if(start_date.day>your_date.day):   
    start_date=start_date.replace(day=your_date.day)            

print start_date

যেমন: ইনপুট তারিখ = 28/12/2015 পূর্ববর্তী তারিখের 6 মাস গণনা করুন।

আমি) গণনার মাস: এই পদক্ষেপটি আপনাকে 30/06/2015 হিসাবে শুরু_ তারিখ দিবে।
নোট করুন যে গণনা মাসের পদক্ষেপের পরে আপনি প্রয়োজনীয় মাসের শেষ দিনটি পাবেন।

দ্বিতীয়) কালকুলেট দিন: শর্ত যদি (start_date.day> আপনার_ তারিখ.দিন) দিনটি প্রয়োজনীয় মাসে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে। এই শর্তটি পরিচালনা করে যেখানে ইনপুট তারিখটি 31 (বা 30) এবং প্রয়োজনীয় মাসে 31 এর কম (বা ফেব্রের ক্ষেত্রে 30) দিন থাকে। এটি লিপ ইয়ার কেসও পরিচালনা করে (ফেব্রুয়ারির জন্য)। এই পদক্ষেপের পরে আপনি 28/06/2015 হিসাবে ফলাফল পাবেন

যদি এই শর্তটি সন্তুষ্ট না হয় তবে শুরু_ তারিখটি আগের মাসের শেষ তারিখ থেকে যায়। সুতরাং আপনি যদি 31/12/2015টিকে ইনপুট তারিখ হিসাবে দেন এবং আগের তারিখটি 6 মাস চান, এটি আপনাকে 30/06/2015 দেবে


0

আপনি X মাসের আগে / পরে তারিখ পেতে নীচে প্রদত্ত ফাংশনটি ব্যবহার করতে পারেন।

তারিখের সময় আমদানির তারিখ থেকে

ডিএফ পরবর্তী_মাস (প্রদত্ত_ তারিখ, মাস):
    yyyy = int ((প্রদত্ত_ তারিখ.ইয়ার * 12 + প্রদত্ত_সীম.মর্থ) + মাস) / 12)
    মিমি = ইনট ((প্রদত্ত_ তারিখ.ইয়ার * 12 + প্রদত্ত_সীম.মর্থ) + মাস)% 12)

    যদি মিমি == 0:
        হ্যাঁ - = 1
        মিমি = 12

    প্রদত্ত_ডেট.রেপস রিটার্ন (বছর = হ্যাঁ, মাস = মিমি)


যদি __ নাম__ == "__ মেইন__":
    আজ = তারিখ.আজ আজ ()
    মুদ্রণ (আজ)

    মিমি জন্য [-12, -1, 0, 1, 2, 12, 20] এ:
        পরের_ তারিখ = পরবর্তী_মিনি (আজ, মিমি)
        মুদ্রণ (পরের_ তারিখ)

0

আমি মনে করি এই উত্তরটি বেশ পঠনযোগ্য:

def month_delta(dt, delta):
    year_delta, month = divmod(dt.month + delta, 12)

    if month == 0:
        # convert a 0 to december
        month = 12
        if delta < 0:
            # if moving backwards, then it's december of last year
            year_delta -= 1

    year = dt.year + year_delta

    return dt.replace(month=month, year=year)

for delta in range(-20, 21):
    print(delta, "->", month_delta(datetime(2011, 1, 1), delta))

-20 -> 2009-05-01 00:00:00
-19 -> 2009-06-01 00:00:00
-18 -> 2009-07-01 00:00:00
-17 -> 2009-08-01 00:00:00
-16 -> 2009-09-01 00:00:00
-15 -> 2009-10-01 00:00:00
-14 -> 2009-11-01 00:00:00
-13 -> 2009-12-01 00:00:00
-12 -> 2010-01-01 00:00:00
-11 -> 2010-02-01 00:00:00
-10 -> 2010-03-01 00:00:00
-9 -> 2010-04-01 00:00:00
-8 -> 2010-05-01 00:00:00
-7 -> 2010-06-01 00:00:00
-6 -> 2010-07-01 00:00:00
-5 -> 2010-08-01 00:00:00
-4 -> 2010-09-01 00:00:00
-3 -> 2010-10-01 00:00:00
-2 -> 2010-11-01 00:00:00
-1 -> 2010-12-01 00:00:00
0 -> 2011-01-01 00:00:00
1 -> 2011-02-01 00:00:00
2 -> 2011-03-01 00:00:00
3 -> 2011-04-01 00:00:00
4 -> 2011-05-01 00:00:00
5 -> 2011-06-01 00:00:00
6 -> 2011-07-01 00:00:00
7 -> 2011-08-01 00:00:00
8 -> 2011-09-01 00:00:00
9 -> 2011-10-01 00:00:00
10 -> 2011-11-01 00:00:00
11 -> 2012-12-01 00:00:00
12 -> 2012-01-01 00:00:00
13 -> 2012-02-01 00:00:00
14 -> 2012-03-01 00:00:00
15 -> 2012-04-01 00:00:00
16 -> 2012-05-01 00:00:00
17 -> 2012-06-01 00:00:00
18 -> 2012-07-01 00:00:00
19 -> 2012-08-01 00:00:00
20 -> 2012-09-01 00:00:00

0

এক রৈখিক ?

previous_month_date = (current_date - datetime.timedelta(days=current_date.day+1)).replace(day=current_date.day)


0

সহজ উপায় যা আমি এখনই চেষ্টা করেছি

from datetime import datetime
from django.utils import timezone





current = timezone.now()
if current.month == 1:
     month = 12
else:
     month = current.month - 1
current = datetime(current.year, month, current.day)

0

কিছু সময় আগে আমি নিম্নলিখিত অ্যালগরিদম জুড়ে এসেছি যা এক dateবা এক মাস বাড়ানো এবং হ্রাসের জন্য খুব ভাল কাজ করে datetime

কায়েট : dayনতুন মাসে পাওয়া না গেলে এটি ব্যর্থ হবে । আমি day == 1সর্বদা যেখানে তারিখ অবজেক্টে এটি ব্যবহার করি ।

পাইথন 3.x:

def increment_month(d, add=1):
    return date(d.year+(d.month+add-1)//12, (d.month+add-1) % 12+1, 1)

পাইথন ২.7 এর //12জন্য ঠিক পরিবর্তন করুন/12 পূর্ণসংখ্যা বিভাগ বিভক্ত হওয়ার কারণে ।

একটি স্ক্রিপ্ট এই দরকারী গ্লোবালগুলি পেতে শুরু করার সময় আমি সম্প্রতি এটি ডিফল্ট ফাইলে ব্যবহার করেছি:

MONTH_THIS = datetime.date.today()
MONTH_THIS = datetime.date(MONTH_THIS.year, MONTH_THIS.month, 1)

MONTH_1AGO = datetime.date(MONTH_THIS.year+(MONTH_THIS.month-2)//12,
                           (MONTH_THIS.month-2) % 12+1, 1)

MONTH_2AGO = datetime.date(MONTH_THIS.year+(MONTH_THIS.month-3)//12,
                           (MONTH_THIS.month-3) % 12+1, 1)

-2
import datetime
date_str = '08/01/2018'
format_str = '%d/%m/%Y'
datetime_obj = datetime.datetime.strptime(date_str, format_str)   
datetime_obj.replace(month=datetime_obj.month-1)

সহজ সমাধান, বিশেষ গ্রন্থাগারের প্রয়োজন নেই।


4
তারিখটি 31 শে মার্চের মতো হয়ে গেলে কাজ করবে না।
ফায়ারকাস্ট

4
বা 1 লা জানুয়ারীর মতো
লিয়ানড্রো হম্ব

-3

আপনি এটি দুটি লাইনে এটি করতে পারেন:

now = datetime.now()
last_month = datetime(now.year, now.month - 1, now.day)

আমদানি মনে রাখবেন

from datetime import datetime

4
এটা জান যদি হয়?
সের্গেই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.