تاریخچه تاریخ کتابخانه استاندارد پایتون را می توان برای پردازش تاریخ ها و زمان ها (تاریخ، زمان و زمان) استفاده کرد. متدهای strftime() و strptime()، که تاریخ ها و زمان ها را به رشته ها و از رشته ها تبدیل می کنند، می توانند برای دستکاری تاریخ ها و زمان ها در فرمت های مختلف استفاده شوند.
همچنین می تواند عملیاتی مانند تفریق و جمع را انجام دهد. به عنوان مثال شما می توانید به راحتی تاریخ 10 روز قبل یا 3 هفته بعد و یا زمان 50 دقیقه بعد را محاسبه و دریافت کنید.
ابتدا، کلاس های زیر از اشیاء موجود در ماژول datetime را شرح خواهیم داد.
datetime.datetime
:تاریخ و زمان (تاریخ و ساعت)datetime.date
:تاریخdatetime.time
:زمانdatetime.timedelta
:اختلاف زمانی و زمان سپری شده
متدهای strftime() و strptime()، که تاریخ/زمان و رشته را به یکدیگر تبدیل میکنند، نیز توضیح داده شدهاند.
datetime
هدف – شیdatetime.now()
:تاریخ امروز، زمان فعلیdatetime
سازنده شی- تبدیل شیء datetime به شیء تاریخ
date
هدف – شیdate.today()
:تاریخ امروز- سازنده برای شی تاریخ
time
هدف – شی- سازنده برای شی زمان
timedelta
هدف – شی- برای ایجاد اشیاء timedelta، اشیاء datetime و date را کم کنید.
- سازنده برای شی timedelta
- تفریق و جمع با استفاده از اشیاء 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
همچنین امکان تولید اشیاء datetime برای تاریخ ها و زمان های دلخواه وجود دارد.
سازنده شی datetime به صورت زیر است.
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() به یک شی 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 به صورت زیر است
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
شی timedelta
شی timedelta یک شی است که نشان دهنده اختلاف زمانی بین دو تاریخ و زمان یا زمان سپری شده است. اطلاعات آن بر حسب روز، ثانیه و میکروثانیه است و با ویژگی های روز، ثانیه و میکروثانیه قابل دسترسی است. همچنین با استفاده از روش total_seconds () می توان تعداد کل ثانیه ها را بدست آورد.
برای ایجاد شی timedelta، اشیاء datetime و date را کم کنید.
با کم کردن اشیاء datetime از یکدیگر یک شی timedelta به دست می آید.
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 به دست می دهد.
سازنده برای شی timedelta
سازنده شی timedelta به شرح زیر است
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
همه آنها اختیاری هستند و اگر حذف شوند روی 0 تنظیم می شوند.
توجه داشته باشید که شی timedelta فقط اطلاعات زیر را در خود دارد.
- تعدادی روز:
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
تفریق و جمع با استفاده از اشیاء timedelta
شی timedelta را می توان با اشیاء datetime و date برای انجام عملیاتی مانند تفریق و جمع استفاده کرد. به عنوان مثال می توانید به راحتی تاریخ یک هفته قبل یا 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():تبدیل از تاریخ و زمان به رشته
متد strftime() تاریخ و اشیاء تاریخ را می توان برای تبدیل اطلاعات تاریخ و زمان (تاریخ و زمان) به رشته ای با هر فرمتی استفاده کرد.
کد قالب بندی
برای اطلاع از کدهای قالب بندی موجود به مستندات رسمی زیر مراجعه کنید.
کدهای قالب بندی اصلی در زیر فهرست شده اند.
%d
:روز ماه در نماد اعشاری با صفر پر شده است.%m
:ماه در نماد اعشاری با صفر پر شده است.%y
:دو رقم آخر سال با نماد اعشاری پر از صفر.%Y
:چهار رقم سال به صورت اعشاری با صفر پر شده است.%H
:وقتی با نماد اعشاری با صفر پر شده بیان می شود (نشان 24 ساعته)%I
:وقتی با نماد اعشاری با صفر پر شده بیان می شود (نشان 12 ساعته)%M
:برای نماد اعشاری با صفر پر شده است.%S
:ثانیه در نماد اعشاری با صفر پر شده است.%f
:میکرو ثانیه (6 رقم) به صورت اعشاری با 0 پر شده است.%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'>
در ترکیب با شی timedelta، به راحتی می توان لیستی از تاریخ های دو هفته ای را در هر قالبی ایجاد کرد.
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 (Python 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'>
با استفاده از متد strftime() در شیء بازیابی شده datetime، می توانید تاریخ و زمان را در قالبی متفاوت از رشته اصلی نمایش دهید.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
اگر آن را به یک شی datetime تبدیل کنید، میتوانید با اشیاء timedelta نیز عملیات انجام دهید، به عنوان مثال، میتوانید رشتهای از تاریخ 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