আগের মাসের অজগর তারিখ


131

আমি পাইথন দিয়ে আগের মাসের তারিখ পাওয়ার চেষ্টা করছি। এখানে আমি চেষ্টা করেছি:

str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )

তবে, এই উপায়টি 2 কারণে খারাপ: প্রথমে এটি 20122 সালের ফেব্রুয়ারির জন্য (201202 এর পরিবর্তে) ফেরত দেয় এবং দ্বিতীয়ত এটি জানুয়ারীর 12 এর পরিবর্তে 0 ফিরে আসবে।

আমি বাশ দিয়ে এই ঝামেলাটি সমাধান করেছি

echo $(date -d"3 month ago" "+%G%m%d")

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

if int(time.strftime('%m')) == 1:
    return '12'
else:
    if int(time.strftime('%m')) < 10:
        return '0'+str(time.strftime('%m')-1)
    else:
        return str(time.strftime('%m') -1)

আমি এই কোডটি পরীক্ষা করি নি এবং আমি যাইহোক এটি ব্যবহার করতে চাই না (যদি না আমি অন্য কোনও উপায় না পাই: /)

আপনার সাহায্যের জন্য ধন্যবাদ!


উত্তর:


299

ডেটটাইম এবং ডেটটাইম.টিমেডেলটা ক্লাসগুলি আপনার বন্ধু।

  1. আজ খুঁজে।
  2. এই মাসের প্রথম দিনটি খুঁজে পেতে এটি ব্যবহার করুন।
  3. পূর্ববর্তী মাসের শেষ দিন পর্যন্ত একদিন ব্যাকআপ রাখতে টাইমডেল্টা ব্যবহার করুন।
  4. আপনি যে ওয়াইওয়াইএমএম স্ট্রিংটি সন্ধান করছেন তা মুদ্রণ করুন।

এটার মত:

 import datetime
 today = datetime.date.today()
 first = today.replace(day=1)
 lastMonth = first - datetime.timedelta(days=1)
 print(lastMonth.strftime("%Y%m"))

201202 মুদ্রিত হয়


31
আপনি .replace()পদ্ধতিটি ব্যবহার করতে পারেন :datetime.utcnow().replace(day=1) - timedelta(days=1)
jfs

1
শান্ত! আমি প্রতিস্থাপনের পদ্ধতিটি মিস করেছি।
বিজিপিটার

আপনি .replace()ফাংশন চেইন করতে পারেন । গত মাসে একবার এটি করুন, তারপরে আপনার পছন্দের দিনটি পেতে আবার করুন। প্রথম: d = date.today() তারপরেone_month_ago = (d.replace(day=1) - timedelta(days=1)).replace(day=d.day)
থানা প্লামার

@ জেফাসেবাস্টিয়ান আপনি সঠিক - এটি নির্দেশ করার জন্য ধন্যবাদ। এটির জন্য একটি মার্জিত ওয়ান-লাইনার বলে মনে হয় না যে "মাস" কোনও ধ্রুবক সময়কাল নয়। আপনি ২ য় ফাংশনে আমদানি calendarকরে calendar.mdays[d.month-1]এবং আরও কদর্যতা ব্যবহার করে কুৎসিত কিছু করতে পারেন তবে এটি অ-পাইথোনিক বলে মনে হচ্ছে এবং কোণার ক্ষেত্রে এটি দায়ী নয়। আমি নীচে আমার উত্তরটি আপডেট করেছি যেটি সমস্ত ক্ষেত্রে অ্যাকাউন্ট হিসাবে ব্যবহার করে, যদিও আমি অ্যালগরিদমের অংশ হিসাবে ব্যতিক্রম ব্যবহার করে ঘৃণা করি। min()replacetry - except
থানা প্লামার

ইভানের উত্তর দেখুন এবং যুক্ত করুন: মিনিট (তারিখ.আজ আজ (দিন। শেষ দিন_ও_প্রথম_মর্থ.দিন)
michel.iamit

70

আপনার ডেটুটিল ব্যবহার করা উচিত । এটির সাথে আপনি আপেক্ষিকেল্টেলটা ব্যবহার করতে পারেন, এটি টাইমডেলটার একটি উন্নত সংস্করণ।

>>> import datetime 
>>> import dateutil.relativedelta
>>> now = datetime.datetime.now()
>>> print now
2012-03-15 12:33:04.281248
>>> print now + dateutil.relativedelta.relativedelta(months=-1)
2012-02-15 12:33:04.281248

এটি বছরের প্রথম মাসের জন্য কাজ করছে না: >>> অবৈধমণার্থরতা: খারাপ মাসের সংখ্যা -1; অবশ্যই 1-12
এমটোলু

@ এমটোলু ডেটুটিলের কোন সংস্করণ? আমি এই সমস্যাটি নিয়ে আসছি না, তবে আমি কিছু বিকল্প বাক্য গঠন করব
ডেভ বাটলার

1
আমি এটিকে পছন্দ করি কারণ @ বিজিপিটারের কাছে খুব সুন্দর সমাধান থাকলেও তার পরের মাসে সন্ধানের জন্য তাঁর মত কাজ করা ভাল নয়।
ড্যানিয়েল এফ

3
@ এমটলু আপনি সম্ভবত মাস / মাস ভুল টাইপ করেছেন
r_black

2
@r_black হ্যাঁ আপনি ঠিক বলেছেন। এটা আমার দোষ ছিল। এখানে প্রদত্ত সমাধানটি সঠিক এবং বছরের প্রথম মাসের জন্য আর কোনও চেকের প্রয়োজন নেই।
mtoloo

45
from datetime import date, timedelta

first_day_of_current_month = date.today().replace(day=1)
last_day_of_previous_month = first_day_of_current_month - timedelta(days=1)

print "Previous month:", last_day_of_previous_month.month

বা:

from datetime import date, timedelta

prev = date.today().replace(day=1) - timedelta(days=1)
print prev.month

সমাধানের অংশ ... গত মাসের দিনটি সন্ধান করার জন্য, দিনের সংখ্যা অতিক্রম করতে এ জন্য কিছু যুক্ত করুন: দিন_প্রিয়_মিনিথ = মিনিট (আজকের দিন, শেষ_দিন_মোহর_প্রকাশ_মোথ.ডে) days
michel.iamit

9

বিজিপোর্টারের উত্তরে বিল্ডিং ।

def prev_month_range(when = None): 
    """Return (previous month's start date, previous month's end date)."""
    if not when:
        # Default to today.
        when = datetime.datetime.today()
    # Find previous month: https://stackoverflow.com/a/9725093/564514
    # Find today.
    first = datetime.date(day=1, month=when.month, year=when.year)
    # Use that to find the first day of this month.
    prev_month_end = first - datetime.timedelta(days=1)
    prev_month_start = datetime.date(day=1, month= prev_month_end.month, year= prev_month_end.year)
    # Return previous month's start and end dates in YY-MM-DD format.
    return (prev_month_start.strftime('%Y-%m-%d'), prev_month_end.strftime('%Y-%m-%d'))

5

এটি খুব সহজ এবং সহজ। এটা কর

from dateutil.relativedelta import relativedelta
from datetime import datetime

today_date = datetime.today()
print "todays date time: %s" %today_date

one_month_ago = today_date - relativedelta(months=1)
print "one month ago date time: %s" % one_month_ago
print "one month ago date: %s" % one_month_ago.date()

এখানে আউটপুট: y পাইথন 2.7 মূল.পি

todays date time: 2016-09-06 02:13:01.937121
one month ago date time: 2016-08-06 02:13:01.937121
one month ago date: 2016-08-06

4

যে কেউ এখানে এসেছেন এবং আগের মাসের প্রথম এবং শেষ দিন উভয়ই পেতে চেয়েছেন:

from datetime import date, timedelta

last_day_of_prev_month = date.today().replace(day=1) - timedelta(days=1)

start_day_of_prev_month = date.today().replace(day=1) - timedelta(days=last_day_of_prev_month.day)

# For printing results
print("First day of prev month:", start_day_of_prev_month)
print("Last day of prev month:", last_day_of_prev_month)

আউটপুট:

First day of prev month: 2019-02-01
Last day of prev month: 2019-02-28

আপনি যদি এক মাসের শুরু ও শেষ পেতে চান (এবং আরও), Calendarমডিউলটি দেখুন: stackabuse.com/intr
پيداوار- থেকে-

আমরা যদি দ্বিতীয় মাসটি শুরু করতে চাই এবং শেষ করব?
গেমার

3
def prev_month(date=datetime.datetime.today()):
    if date.month == 1:
        return date.replace(month=12,year=date.year-1)
    else:
        try:
            return date.replace(month=date.month-1)
        except ValueError:
            return prev_month(date=date.replace(day=date.day-1))

31 শে মার্চ বিরতি
মাইক

1

কেবল মজাদার জন্য, ডিভোড ব্যবহার করে একটি খাঁটি গণিত উত্তর। গুণনের কারণে খুব অসুবিধাগুলি, মাসের সংখ্যার উপর একটি সহজ চেক করতে পারে (যদি 12 এর সমান হয়, বছর বৃদ্ধি করা ইত্যাদি)

year = today.year
month = today.month

nm = list(divmod(year * 12 + month + 1, 12))
if nm[1] == 0:
    nm[1] = 12
    nm[0] -= 1
pm = list(divmod(year * 12 + month - 1, 12))
if pm[1] == 0:
    pm[1] = 12
    pm[0] -= 1

next_month = nm
previous_month = pm

1

সঙ্গে দোলক খুব সম্পূর্ণ গ্রন্থাগার, আমরা আছে subtractপদ্ধতি ( "subStract" এবং না):

import pendulum
today = pendulum.datetime.today()  # 2020, january
lastmonth = today.subtract(months=1)
lastmonth.strftime('%Y%m')
# '201912'

আমরা দেখতে পাই যে এটি জাম্পিং বছরগুলি পরিচালনা করে।

বিপরীত সমতুল্য হয় add

https://pendulum.eustace.io/docs/#addition-and-subtraction


0

@ জেএফ সেবাস্তিয়ান এর মন্তব্য বন্ধ করে আপনি replace()একটি "মাস" পিছনে ফাংশনটি শৃঙ্খলাবদ্ধ করতে পারেন । যেহেতু একটি মাস স্থির সময়সীমা নয়, এই সমাধানটি আগের মাসে একই তারিখে ফিরে যাওয়ার চেষ্টা করে, যা অবশ্যই সমস্ত মাস ধরে কাজ করে না। এই জাতীয় ক্ষেত্রে, এই অ্যালগরিদম পূর্ববর্তী মাসের শেষ দিনটিতে ডিফল্ট হয়।

from datetime import datetime, timedelta

d = datetime(2012, 3, 31) # A problem date as an example

# last day of last month
one_month_ago = (d.replace(day=1) - timedelta(days=1))
try:
    # try to go back to same day last month
    one_month_ago = one_month_ago.replace(day=d.day)
except ValueError:
    pass
print("one_month_ago: {0}".format(one_month_ago))

আউটপুট:

one_month_ago: 2012-02-29 00:00:00

0

আপনি যদি একটি লিনাক্স / ইউনিক্স পরিবেশে একটি EXE টাইপ ফাইলে ASCII বর্ণগুলি দেখতে চান তবে "od -c 'ফাইলের নাম' | আরও" চেষ্টা করুন

আপনি সম্ভবত প্রচুর অবিশ্বাস্য আইটেম পাবেন তবে সেগুলি সমস্ত উপস্থাপন করা হবে এবং এইচএক্স উপস্থাপনা প্রদর্শিত হবে এবং এএসসিআইআই সমতুল্য অক্ষর (উপযুক্ত হলে) হেক্স কোডের লাইনটি অনুসরণ করবে follow আপনারা জানেন এমন একটি সংকলিত কোডে এটি ব্যবহার করে দেখুন। আপনি এতে স্বীকৃত জিনিসগুলি দেখতে পাবেন।


এটি কীভাবে প্রশ্নের উত্তর দেয় তা বোঝাতে দয়া করে এটি সম্পাদনা করতে পারেন ।
অ্যাড্রিয়ান এইচএইচএইচ এইচ

0

এখানে একটি উচ্চ স্তরের গ্রন্থাগার রয়েছে dateparserযা প্রাকৃতিক ভাষা প্রদত্ত অতীত তারিখটি নির্ধারণ করতে পারে এবং সংশ্লিষ্ট পাইথন datetimeঅবজেক্টটি ফিরিয়ে আনতে পারে

from dateparser import parse
parse('4 months ago')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.