পাইথনে ডেট এবং টাইম ম্যানিপুলেট করতে datetime নামে একটি মডিউল রয়েছে। ডেট এবং টাইম অবজেক্টের দুটি টাইপ রয়েছে। টাইপগুলো হলো naïve এবং aware।
naïve অবজেক্টে, এই অবজেক্টকে অন্যান্য ডেট-টাইম অবজেক্ট থেকে অনন্যের্থভাবে লোকেট করার জন্য পর্যাপ্ত ইনফরমেশন নেই। এই আপ'r'এ এটি কোঅর্ডিনেট ইউনিভার্সেল টাইম (UTC) ব্যবহার করে।
aware টাইপ অবজেক্টে অ্যালগরিদমিক এবং পলিটিক্যাল টাইম অ্যাডজাস্টমেন্টের বিষয়ে বিভিন্ন ইনফরমেশন রয়েছে। এই টাইপের অবজেক্ট নির্দিষ্ট টাইম মোমেন্ট রিপ্রেজেন্ট করতে ব্যবহৃত হয়।
এই মডিউল ব্যবহার করতে হলে, আমাদের এটি ইম্পোর্ট করতে হবে -
import datetime
এই মডিউলে ভিন্ন ক্লাস, কনস্ট্যান্ট এবং মেথড রয়েছে।
কনস্ট্যান্টগুলো হলো -
| Sr.No. | Constant & Description |
|---|---|
| 1 | datetime.MINYEAR এটি সবচেয়ে ছোট ইয়ার নম্বর, যা ডেট বা ডেটটাইম অবজেক্ট হিসেবে প্রয়োগ করা যায়। মান ১ |
| 2 | datetime.MAXYEAR এটি সবচেয়ে বড় ইয়ার নম্বর, যা ডেট বা ডেটটাইম অবজেক্ট হিসেবে প্রয়োগ করা যায়। মান ৯৯৯৯ |
উপলব্ধ ডেটা টাইপগুলো -
| Sr.No. | Datatypes & Description |
|---|---|
| 1 | date এটি ডেট টাইপ অবজেক্ট। এটি গ্রিগোরিয়ান ক্যালেন্ডার ব্যবহার করে। এর ইয়ার, মাস, ডে অ্যাট্রিবিউট রয়েছে। |
| 2 | time এটি একটি টাইম অবজেক্ট ক্লাস। এটি যেকোনো নির্দিষ্ট দিন থেকে স্বতন্ত্র। এর আয়ার, মিনিট, সেকেন্ড, মাইক্রোসেকেন্ড এবং tzinfo অ্যাট্রিবিউট রয়েছে। |
| 3 | datetime এটি ডেট এবং টাইমের একটি কম্বাইনড সেট। |
| 4 | timedelta এটি দুটি ডেট, টাইম বা ডেটটাইম ভ্যালুর মধ্যে পার্থক্য মিলিসেকেন্ডে এক্সপ্রেস করতে ব্যবহৃত হয়। |
| 5 | tzinfo এটি একটি অ্যাবস্ট্রাক্ট বেস ক্লাস। এটি টাইম জোন ইনফরমেশন ধারণ করে। এটি datetime এবং time ক্লাস দ্বারা ব্যবহৃত হয়। |
| 6 | timezone এই ক্লাসে, এটি tzinfo বাস্তবায়ন করে। UTC থেকে একটি ফিক্সড অফসেট রয়েছে। |
ডেট টাইপ অবজেক্ট
ডেট অবজেক্ট একটি ডেট রিপ্রেজেন্ট করে। ডেটে ডে, মাস এবং ইয়ার অংশ রয়েছে। এটি গ্রিগোরিয়ান ক্যালেন্ডার ব্যবহার করে। এই ক্যালেন্ডার অনুযায়ী, ইয়ার ১-এর জানুয়ারি ১ কে ডে নম্বর ১ বলা হয়, এবং এভাবেই চলতে থাকে।
কিছু ডেট সংক্রান্ত মেথড -
date.date(year, month, day) মেথড
এটি একটি ডেট টাইপ অবজেক্ট তৈরি করার কনস্ট্রাক্টর। একটি ডেট তৈরি করতে সব আর্গুমেন্ট ইন্টিজার টাইপ ডেটা হিসেবে প্রয়োজন। ইয়ার MINYEAR এবং MAXYEAR-এর রেঞ্জে হতে হবে। যদি দেওয়া ডেট বৈধ নয়, তবে এটি ValueError উত্থাপন করবে।
date.today() মেথড
এই মেথড বর্তমান লোকাল ডেট ফেরত দেয়।
date.fromtimestamp(timestamp) মেথড
এই মেথড POSIX টাইমস্ট্যাম্প থেকে ডেট পাওয়ার জন্য ব্যবহৃত হয়। যদি টাইমস্ট্যাম্প ভ্যালু আউট অফ রেঞ্জ হয়, তবে এটি OverflowError উত্থাপন করবে।
date.fromordinal(ordinal) মেথড
এই মেথড প্রোলেপটিক গ্রিগোরিয়ান ক্যালেন্ডার অর্ডিনাল থেকে ডেট পাওয়ার জন্য ব্যবহৃত হয়। এটি ইয়ার ১-র জানুয়ারি ১ থেকে ডেট কাউন্ট থেকে ডেট পাওয়ার জন্য ব্যবহৃত হয়।
date.toordinal() মেথড
এই মেথড একটি ডেটকে প্রোলেপটিক গ্রিগোরিয়ান ক্যালেন্ডার অর্ডিনালে ফেরত দেয়।
date.weekday() মেথড
এই মেথড একটি সপ্তাহের দিনকে ডেট থেকে ইন্টিজার হিসেবে ফেরত দেয়। মঙ্গলবার ০, মঙ্গলবার ১ এবং এভাবেই চলতে থাকে।
date.isoformat() মেথড
এই মেথড ডেটকে ISO 8601 ফরম্যাট স্ট্রিং হিসেবে ফেরত দেয়। ফরম্যাট হলো YYYY-MM-DD।
উদাহরণ কোড
import datetime as dt
new_date = dt.date(1998, 9, 5) # ৫ সেপ্টেম্বর, ১৯৯৮ তারিখ সংরক্ষণ
print("The Date is: " + str(new_date))
print("Ordinal value of given date: " + str(new_date.toordinal()))
print("The weekday of the given date: " + str(new_date.weekday())) # সোমবার ০
my_date = dt.date.fromordinal(732698) # অর্ডিনাল ভ্যালু থেকে ডেট তৈরি
print("The Date from ordinal is: " + str(my_date))
td = my_date - new_date # একটি timedelta অবজেক্ট তৈরি
print('td Type: ' + str(type(td)) + '\nDifference: ' + str(td))
আউটপুট
The Date is: 1998-09-05 Ordinal value of given date: 729637 The weekday of the given date: 5 The Date from ordinal is: 2007-01-22 td Type:Difference: 3061 days, 0:00:00
টাইম অবজেক্ট
টাইম অবজেক্ট একটি লোকাল টাইম রিপ্রেজেন্ট করে। টাইমে আয়ার, মিনিট, সেকেন্ড, মাইক্রোসেকেন্ড, tzinfo অংশ রয়েছে। আয়ার ০ থেকে ২৪ রেঞ্জে থাকবে এবং মিনিট এবং সেকেন্ড ০ থেকে ৬০ রেঞ্জে, এবং মাইক্রোসেকেন্ড ০ থেকে ১০০০০০০ রেঞ্জে থাকবে।
কিছু টাইম সংক্রান্ত মেথড -
time.fromisoformat(time_string) মেথড
এই মেথড একটি ISO 8601 স্ট্রিং থেকে টাইম পাওয়ার জন্য ব্যবহৃত হয়। এটি time.isoformat() মেথডের যেকোনো আউটপুট নিতে পারে।
time.replace(hour = self.hour, minute = self.minute, second = self.second, microsecond = self.microseconds, tzinfo = self.tzinfo, *fold=0) মেথড
এই মেথড আর্গুমেন্ট থেকে ভ্যালু लेकर একটি টাইম ফেরত দেয়। যদি কোনো আর্গুমেন্ট পাস করা না থাকে, তবে এটি একই টাইম অবজেক্ট ভ্যালু ফেরত দেবে।
time.tzname() মেথড
এই মেথড টাইম জোনের নাম ফেরত দেয়। যদি tzinfo None হয়, তবে এটি None ফেরত দেবে।
ডেটটাইম অবজেক্ট
ডেটটাইম অবজেক্ট ডেট এবং টাইম উভয় ধারণ করে। ডেট অবজেক্ট হিসেবে, এটি গ্রিগোরিয়ান ক্যালেন্ডার সাপোর্ট করে এবং টাইম অবজেক্ট হিসেবে এটি প্রতিটি দিনে ঠিক ৩৬০০*২৪ সেকেন্ড ধারণ করে।
এটি সকল ডেট এবং টাইম সংক্রান্ত মেথড সাপোর্ট করে, ডেটটাইমের জন্য কিছু মেথডও রয়েছে। এগুলো হলো -
datetime.now(tz=None) মেথড
এই মেথড বর্তমান ডেট এবং টাইম পাওয়ার জন্য ব্যবহৃত হয়। যদি tz উপস্থিত না থাকে বা None হয়, তবে এটি today() মেথডের মতো ডেট ফেরত দেবে।
datetime.utcnow() মেথড
এই মেথড বর্তমান UTC ডেট এবং টাইম সংক্রান্ত ইনফরমেশন পাওয়ার জন্য ব্যবহৃত হয়।
আরেকটি দুটি মেথড রয়েছে strftime() এবং strptime()। এই দুটি মেথড ডেট এবং টাইম অবজেক্টের জন্য, সেই সাথে ডেটটাইম অবজেক্টের জন্যও প্রযোজ্য।
datetime.strftime(format[, t]) মেথড
strftime() মেথড একটি টাপল বা struct_time যা gmtime() বা localtime() দ্বারা ফেরত দেওয়া হয় একটি টাইম রিপ্রেজেন্ট করে, ফরম্যাট আর্গুমেন্ট দ্বারা নির্দিষ্ট স্ট্রিং হিসেবে কনভার্ট করে। যদি t প্রদান না করা হয়, তবে localtime() দ্বারা ফেরত দেওয়া বর্তমান টাইম ব্যবহার করা হয়। format অবশ্যই একটি স্ট্রিং হবে। কোনো ফিল্ড যদি t-এ ألোয়েড রেঞ্জের বাইরে থাকে, তবে ValueError এক্সেপশন উত্থাপিত হবে।
datetime.strptime(format[, t]) মেথড
strptime() মেথড একটি ফরম্যাট অনুযায়ী একটি টাইম রিপ্রেজেন্ট করার স্ট্রিং পার্স করে। রিটার্ন ভ্যালু হলো একটি struct_time যা gmtime() বা localtime() দ্বারা ফেরত দেওয়া হয়। ফরম্যাট প্যারামিটার strftime() দ্বারা ব্যবহৃত একই ডিরেক্টিভ ব্যবহার করে; এটি ডিফল্টভাবে "%a %b %d %H:%M:%S %Y" যা ctime() দ্বারা ফেরত দেওয়া ফরম্যাটের সাথে মিলে।
এই দুটি মেথড কিছু ডিরেক্টিভ ব্যবহার করে। 그중 কিছু নিচে লিস্ট করা হয়েছে -
| Sr.No. | Directives & Description |
|---|---|
| 1 | %A পূর্ণ সপ্তাহের নাম |
| 2 | %B পূর্ণ মাসের নাম |
| 3 | %d মাসের দিন (০ থেকে ৩১) |
| 4 | %S সেকেন্ড |
| 5 | %G ISO সপ্তাহ নম্বর অনুযায়ী ৪ ডিজিট ইয়ার |
| 6 | %m মাস (১ থেকে ১২) |
| 7 | %M মিনিট |
| 8 | %T বর্তমান টাইম, %H:%M:%S-এর সমান |
| 9 | %W কারেন্ট ইয়ারের সপ্তাহ নম্বর, প্রথম সোমবারকে প্রথম সপ্তাহের প্রথম দিন হিসেবে শুরু |
| 10 | %w দশমিক হিসেবে সপ্তাহের দিন, রবিবার=০ |
| 11 | %Y শতাব্দসহ ইয়ার |
| 12 | %Z or %z টাইম জোন বা নাম বা সংক্ষিপ্ত রূপ |
উদাহরণ কোড
import datetime as dt
my_date1 = dt.datetime(2015, 1, 4) # ৪ জানুয়ারি, ২০১৫ তারিখ সংরক্ষণ
print(my_date1)
print('The Weekday of that day was: ' + my_date1.strftime('%A'))
my_date2 = dt.datetime.strptime('August-15-2017', '%B-%d-%Y') # ১৫ আগস্ট, ২০১৭ তারিখ সংরক্ষণ
print(my_date2)
print('The Weekday of that day was: ' + my_date2.strftime('%A'))
print('The difference between two days: ' + str(abs(my_date1 - my_date2)))
আউটপুট
2015-01-04 00:00:00 The Weekday of that day was: Sunday 2017-08-15 00:00:00 The Weekday of that day was: Tuesday The difference between two days: 954 days, 0:00:00