Python এর স্ট্যান্ডার্ড লাইব্রেরি datetime তারিখ এবং সময় (তারিখ, সময় এবং সময়) প্রক্রিয়া করতে ব্যবহার করা যেতে পারে। পদ্ধতিগুলি strftime() এবং strptime(), যা তারিখ এবং সময়গুলিকে স্ট্রিং-এ এবং থেকে রূপান্তর করে, বিভিন্ন বিন্যাসে তারিখ এবং সময়গুলি পরিচালনা করতে ব্যবহার করা যেতে পারে।
এটি বিয়োগ এবং যোগের মতো ক্রিয়াকলাপও সম্পাদন করতে পারে। উদাহরণস্বরূপ, আপনি সহজেই গণনা করতে পারেন এবং 10 দিন আগের তারিখ বা এখন থেকে 3 সপ্তাহ বা এখন থেকে 50 মিনিটের সময় পেতে পারেন।
প্রথমে, আমরা ডেটটাইম মডিউলে উপলব্ধ অবজেক্টের নিম্নলিখিত ক্লাসগুলি বর্ণনা করব।
datetime.datetime
:তারিখ এবং সময় (তারিখ এবং সময়)datetime.date
:তারিখdatetime.time
:সময়datetime.timedelta
:সময়ের পার্থক্য এবং অতিবাহিত সময়
পদ্ধতিগুলি strftime() এবং strptime(), যা তারিখ/সময় এবং স্ট্রিং একে অপরের সাথে রূপান্তর করে, এছাড়াও ব্যাখ্যা করা হয়েছে।
datetime
বস্তুdatetime.now()
:আজকের তারিখ, বর্তমান সময়datetime
অবজেক্ট কনস্ট্রাক্টর- একটি datetime অবজেক্টকে তারিখ অবজেক্টে রূপান্তর করা
date
বস্তুdate.today()
:আজকের তারিখ- তারিখ অবজেক্টের জন্য কনস্ট্রাক্টর
time
বস্তু- টাইম অবজেক্টের কনস্ট্রাক্টর
timedelta
বস্তু- টাইমডেল্টা অবজেক্ট তৈরি করতে তারিখ সময় এবং তারিখ অবজেক্ট বিয়োগ করুন।
- টাইমডেল্টা অবজেক্টের কনস্ট্রাক্টর
- টাইমডেল্টা বস্তু ব্যবহার করে বিয়োগ এবং যোগ
strftime()
:তারিখ এবং সময় থেকে স্ট্রিং রূপান্তরstrptime()
:স্ট্রিং থেকে তারিখ এবং সময় রূপান্তর
এছাড়াও স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত ক্যালেন্ডার মডিউল, যা প্লেইন টেক্সট বা HTML ফর্ম্যাটে ক্যালেন্ডার তৈরি করে।
datetime অবজেক্ট
ডেটটাইম অবজেক্ট হল এমন একটি বস্তু যাতে তারিখ (বছর, মাস, দিন) এবং সময় (ঘণ্টা, মিনিট, সেকেন্ড, মাইক্রোসেকেন্ড) উভয় তথ্য থাকে। আপনি নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে সেই তথ্যগুলি অ্যাক্সেস করতে পারেন।
year
month
day
hour
minute
second
microsecond
datetime.now():আজকের তারিখ, বর্তমান সময়
datetime.now() আপনাকে আজকের তারিখ (বর্তমান তারিখ) এবং বর্তমান সময় সহ একটি datetime অবজেক্ট দেবে।
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
ডেটটাইম অবজেক্টের জন্য কনস্ট্রাক্টর
নির্বিচারে তারিখ এবং সময়ের জন্য ডেটটাইম অবজেক্ট তৈরি করাও সম্ভব।
ডেটটাইম অবজেক্টের কনস্ট্রাক্টর নিম্নরূপ।
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
নিম্নলিখিত মানগুলি প্রয়োজন এবং অন্যগুলি বাদ দেওয়া যেতে পারে৷ যদি বাদ দেওয়া হয়, ডিফল্ট মান 0 হয়।
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
একটি datetime অবজেক্টকে তারিখ অবজেক্টে রূপান্তর করা
একটি datetime অবজেক্টকে date() পদ্ধতির মাধ্যমে তারিখ অবজেক্টে রূপান্তর করা যেতে পারে, যেমনটি পরবর্তী বর্ণনা করা হয়েছে।
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
তারিখ বস্তু
একটি তারিখ বস্তু এমন একটি বস্তু যা একটি তারিখ (বছর, মাস, দিন) সম্পর্কে তথ্য ধারণ করে। এটি বছর, মাস এবং দিন বৈশিষ্ট্য দ্বারা অ্যাক্সেস করা যেতে পারে।
date.today():আজকের তারিখ
বর্তমান তারিখের তারিখ অবজেক্ট (আজকের তারিখ) date.today() দিয়ে প্রাপ্ত করা যেতে পারে।
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
তারিখ অবজেক্টের জন্য কনস্ট্রাক্টর
তারিখ অবজেক্টের কনস্ট্রাক্টর নিম্নরূপ
date(year, month, day)
সব প্রয়োজনীয় এবং বাদ দেওয়া যাবে না.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
সময় বস্তু
টাইম অবজেক্ট হল এমন একটি বস্তু যাতে সময় (ঘন্টা, মিনিট, সেকেন্ড এবং মাইক্রোসেকেন্ড) সম্পর্কে তথ্য থাকে। ঘন্টা, মিনিট, সেকেন্ড এবং মাইক্রোসেকেন্ড বৈশিষ্ট্যগুলি ব্যবহার করে এটি অ্যাক্সেস করা যেতে পারে।
টাইম অবজেক্টের কনস্ট্রাক্টর
টাইম অবজেক্টের কনস্ট্রাক্টর নিম্নরূপ।
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
সেগুলি সব ঐচ্ছিক, এবং যদি সেগুলি বাদ দেওয়া হয়, সেগুলি 0 এ সেট করা হয়৷
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
টাইমডেল্টা বস্তু
টাইমডেল্টা অবজেক্ট হল একটি বস্তু যা দুটি তারিখ এবং সময়ের মধ্যে সময়ের পার্থক্য বা অতিবাহিত সময়ের প্রতিনিধিত্ব করে। এটিতে দিন, সেকেন্ড এবং মাইক্রোসেকেন্ডে তথ্য রয়েছে এবং দিন, সেকেন্ড এবং মাইক্রোসেকেন্ড বৈশিষ্ট্য দ্বারা অ্যাক্সেস করা যেতে পারে। total_seconds() পদ্ধতি ব্যবহার করে মোট সেকেন্ডের সংখ্যা পাওয়াও সম্ভব।
টাইমডেল্টা অবজেক্ট তৈরি করতে datetime এবং date অবজেক্ট বিয়োগ করুন।
একে অপরের থেকে ডেটটাইম অবজেক্ট বিয়োগ করলে একটি টাইমডেল্টা অবজেক্ট পাওয়া যায়।
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
একে অপরের থেকে তারিখ অবজেক্টের বিয়োগ একইভাবে একটি টাইমডেল্টা অবজেক্ট তৈরি করে।
টাইমডেল্টা অবজেক্টের কনস্ট্রাক্টর
টাইমডেল্টা অবজেক্টের কনস্ট্রাক্টর নিম্নরূপ
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
সেগুলি সব ঐচ্ছিক, এবং যদি সেগুলি বাদ দেওয়া হয়, সেগুলি 0 এ সেট করা হয়৷
মনে রাখবেন যে টাইমডেল্টা অবজেক্ট শুধুমাত্র নিম্নলিখিত তথ্য ধারণ করে।
- দিনের একটি সংখ্যা:
days
- সেকেন্ডের সংখ্যা:
seconds
- মাইক্রোসেকেন্ড গণনা:
microseconds
উদাহরণস্বরূপ, নিম্নলিখিত দুটি সমান
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
টাইমডেল্টা বস্তু ব্যবহার করে বিয়োগ এবং যোগ
টাইমডেল্টা অবজেক্টটি তারিখের সময় এবং তারিখ অবজেক্টের সাথে ব্যবহার করা যেতে পারে যেমন বিয়োগ এবং যোগ করার মতো ক্রিয়াকলাপ সম্পাদন করতে। উদাহরণস্বরূপ, আপনি সহজেই গণনা করতে পারেন এবং এক সপ্তাহ আগে বা এখন থেকে 10 দিন আগে বা এখন থেকে 50 মিনিটের সময় পেতে পারেন।
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
এটি একটি নির্দিষ্ট তারিখ পর্যন্ত দিনের সংখ্যা গণনা করতেও ব্যবহার করা যেতে পারে।
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():তারিখ এবং সময় থেকে স্ট্রিং রূপান্তর
datetime এবং date অবজেক্টের strftime() পদ্ধতিটি তারিখ এবং সময় (তারিখ এবং সময়) তথ্যকে যেকোনো ফরম্যাট বিন্যাসে একটি স্ট্রিংয়ে রূপান্তর করতে ব্যবহার করা যেতে পারে।
ফরম্যাটিং কোড
উপলব্ধ ফর্ম্যাটিং কোডের জন্য নীচের অফিসিয়াল ডকুমেন্টেশন দেখুন।
প্রধান বিন্যাস কোড নীচে তালিকাভুক্ত করা হয়.
%d
:শূন্য পূর্ণ সহ দশমিক স্বরলিপিতে মাসের দিন।%m
:শূন্য পূর্ণ সহ দশমিক স্বরলিপিতে মাস।%y
:শূন্য-পূর্ণ দশমিক স্বরলিপিতে বছরের শেষ দুটি সংখ্যা।%Y
:শূন্য পূর্ণ সহ দশমিক স্বরলিপিতে বছরের চারটি সংখ্যা।%H
:যখন দশমিক স্বরলিপিতে শূন্য ভরা (24-ঘন্টা স্বরলিপি) প্রকাশ করা হয়%I
:শূন্য ভরা (12-ঘণ্টার স্বরলিপি) দিয়ে দশমিক স্বরলিপিতে প্রকাশ করা হলে%M
:শূন্য ভরা দশমিক স্বরলিপি জন্য.%S
:শূন্য পূর্ণ সহ দশমিক স্বরলিপিতে সেকেন্ড।%f
:0 ভরাট সহ দশমিক স্বরলিপিতে মাইক্রোসেকেন্ড (6 সংখ্যা)।%A
:লোকেলের জন্য সপ্তাহের দিনের নাম%a
:লোকেলের জন্য দিনের নাম (সংক্ষিপ্ত রূপ)%B
:স্থানীয় মাসের নাম%b
:স্থানীয় মাসের নাম (সংক্ষিপ্ত আকার)%j
:শূন্য পূরণ সহ দশমিক স্বরলিপিতে বছরের দিন।%U
:শূন্য পূরণ সহ দশমিক স্বরলিপিতে বছরের সপ্তাহের সংখ্যা (সপ্তাহ রবিবার শুরু হয়)%W
:শূন্য পূরণ সহ দশমিক স্বরলিপিতে বছরের সপ্তাহের সংখ্যা (সপ্তাহ সোমবার শুরু হয়)
দিন এবং মাসের নামের জন্য নিম্নলিখিত ফর্ম্যাটিং কোডগুলি লোকেলের উপর নির্ভর করে বিভিন্ন স্ট্রিংয়ে পাওয়া যেতে পারে।
%A
%a
%B
%b
এছাড়াও ISO 8601 ফর্ম্যাট স্ট্রিংগুলির জন্য একটি উত্সর্গীকৃত পদ্ধতি রয়েছে৷
কোডের উদাহরণ
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
আপনি যদি একটি স্ট্রিংয়ের পরিবর্তে একটি সংখ্যা পেতে চান তবে এটিকে int() দিয়ে একটি পূর্ণসংখ্যাতে রূপান্তর করুন।
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
টাইমডেল্টা অবজেক্টের সংমিশ্রণে, এটি তৈরি করা সহজ, উদাহরণস্বরূপ, যেকোনো বিন্যাসে দ্বি-সাপ্তাহিক তারিখের তালিকা।
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
তালিকা বোঝার স্বরলিপি ব্যবহার করা আরও স্মার্ট।
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- সম্পরকিত প্রবন্ধ:পাইথন তালিকা বোঝার স্বরলিপি ব্যবহার করে
strptime():স্ট্রিং থেকে তারিখ এবং সময় রূপান্তর
datetime strptime() তারিখ বা সময় স্ট্রিং থেকে একটি datetime অবজেক্ট তৈরি করতে ব্যবহার করা যেতে পারে। মূল স্ট্রিংয়ের সাথে সম্পর্কিত বিন্যাস স্ট্রিংটি নির্দিষ্ট করা প্রয়োজন।
এছাড়াও ISO 8601 স্ট্রিংগুলির জন্য একটি উত্সর্গীকৃত পদ্ধতি রয়েছে (পাইথন 3.7 বা পরবর্তী)৷
কোডের উদাহরণ
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
পুনরুদ্ধার করা datetime অবজেক্টে strftime() পদ্ধতি ব্যবহার করে, আপনি মূল স্ট্রিং থেকে ভিন্ন ফর্ম্যাটে তারিখ এবং সময় উপস্থাপন করতে পারেন।
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
আপনি যদি এটিকে একটি datetime অবজেক্টে রূপান্তর করেন, আপনি টাইমডেল্টা অবজেক্টের সাথেও অপারেশন করতে পারেন, তাই উদাহরণস্বরূপ, আপনি একই বিন্যাসে 10 দিন আগের তারিখের একটি স্ট্রিং তৈরি করতে পারেন।
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22