Python ඩේට් ටයිම් (strftime, strptime) තුළ දින සහ වේලාවන් තන්තු වෙත සහ ඉන් පිටතට පරිවර්තනය කිරීම

ව්යාපාරික

Python හි සම්මත පුස්තකාලයේ දින කාලය දින සහ වේලාවන් (දින, වේලාවන් සහ වේලාවන්) සැකසීමට භාවිතා කළ හැක. strftime() සහ strptime() යන ක්‍රම, දිනයන් සහ වේලාවන් තන්තු වලට සහ ඉන් පිටතට පරිවර්තනය කරයි, විවිධ ආකෘතිවලින් දින සහ වේලාවන් හැසිරවීමට භාවිතා කළ හැක.

අඩු කිරීම සහ එකතු කිරීම වැනි මෙහෙයුම් ද සිදු කළ හැකිය. උදාහරණයක් ලෙස, ඔබට පහසුවෙන් ගණනය කර දින 10කට පෙර දිනය හෝ මෙතැන් සිට සති 3ක් හෝ මෙතැන් සිට විනාඩි 50ක කාලය ලබා ගත හැක.

පළමුව, අපි දින කාල මොඩියුලයේ ඇති පහත දැක්වෙන වස්තු පන්ති විස්තර කරමු.

  • datetime.datetime:දිනය සහ වේලාව (දිනය සහ වේලාව)
  • datetime.date:දිනය
  • datetime.time:කාලය
  • datetime.timedelta:කාල වෙනස සහ ගත වූ කාලය

දිනය/වේලාව සහ තන්තු එකිනෙක පරිවර්තනය කරන strftime() සහ strptime() ක්‍රම ද පැහැදිලි කර ඇත.

  • datetimeවස්තුව
    • datetime.now():අද දිනය, වත්මන් වේලාව
    • datetimeවස්තු ඉදිකිරීම්කරු
    • දින වස්තුවක් දින වස්තුවක් බවට පරිවර්තනය කිරීම
  • dateවස්තුව
    • date.today():අද දිනය
    • දින වස්තුව සඳහා ඉදිකිරීම්කරු
  • timeවස්තුව
    • කාල වස්තුව සඳහා ඉදිකිරීම්කරු
  • timedeltaවස්තුව
    • ටයිම්ඩෙල්ටා වස්තු සෑදීමට දින වේලාව සහ දින වස්තු අඩු කරන්න.
    • Timedelta වස්තුව සඳහා ඉදිකිරීම්කරු
    • ටයිමෙඩෙල්ටා වස්තු භාවිතයෙන් අඩු කිරීම සහ එකතු කිරීම
  • strftime():දිනය සහ වේලාවේ සිට තන්තුවට පරිවර්තනය කිරීම
  • strptime():තන්තුවෙන් දිනය සහ වේලාවට පරිවර්තනය

සාමාන්‍ය පෙළ හෝ HTML ආකෘතියෙන් දින දර්ශන ජනනය කරන කැලැන්ඩර මොඩියුලය ද සම්මත පුස්තකාලයට ඇතුළත් වේ.

දින කාල වස්තුව

දින කාල වස්තුවක් යනු දිනය (වසර, මාසය, දිනය) සහ වේලාව (පැය, මිනිත්තුව, තත්පර, ක්ෂුද්‍ර තත්පර) යන දෙකම ඇති වස්තුවකි. පහත ගුණාංග සමඟ ඔබට එම තොරතුරු වෙත ප්‍රවේශ විය හැක.

  • year
  • month
  • day
  • hour
  • minute
  • second
  • microsecond

datetime.now():අද දිනය, වත්මන් වේලාව

datetime.now() ඔබට අද දිනය (වත්මන් දිනය) සහ වත්මන් වේලාව සමඟ දින කාල වස්තුවක් ලබා දෙනු ඇත.

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

දින වස්තුවක් දින වස්තුවක් බවට පරිවර්තනය කිරීම

මීළඟට විස්තර කර ඇති පරිදි, දිනය() ක්‍රමය මඟින් දින වස්තුවක් දින වස්තුවක් බවට පරිවර්තනය කළ හැක.

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

timedelta වස්තුව

Timedelta වස්තුව යනු දිනයන් සහ වේලාවන් දෙකක් අතර කාල වෙනස හෝ ගත වූ කාලය නියෝජනය කරන වස්තුවකි. එහි දින, තත්පර සහ ක්ෂුද්‍ර තත්පර වලින් තොරතුරු ඇති අතර දින, තත්පර සහ ක්ෂුද්‍ර තත්පර යන ගුණාංග මගින් ප්‍රවේශ විය හැක. total_seconds() ක්‍රමය භාවිතයෙන් මුළු තත්පර ගණන ලබා ගැනීමට ද හැකිය.

ටයිම්ඩෙල්ටා වස්තුව සෑදීමට දින වේලාව සහ දින වස්තු අඩු කරන්න.

ඩේටයිටයිම් වස්තු එකිනෙකින් අඩු කිරීමෙන් ටයිම්ඩෙල්ටා වස්තුවක් ලැබේ.

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(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

ටයිමෙඩෙල්ටා වස්තු භාවිතයෙන් අඩු කිරීම සහ එකතු කිරීම

අඩු කිරීම සහ එකතු කිරීම වැනි ක්‍රියාවන් සිදු කිරීම සඳහා ටයිම්ඩෙල්ටා වස්තුව දින වේලාව සහ දින වස්තු සමඟ භාවිතා කළ හැක. උදාහරණයක් ලෙස, ඔබට පහසුවෙන් ගණනය කර සතියකට පෙර දිනය හෝ මෙතැන් සිට දින 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() දිනයකින් හෝ කාල තන්තුවකින් ඩේට් ටයිම් වස්තුවක් සෑදීමට භාවිතා කළ හැක. මුල් තන්තුවට අනුරූප වන හැඩතල ගැන්වීමේ තන්තුව නියම කිරීම අවශ්ය වේ.

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() ක්‍රමය භාවිතා කිරීමෙන්, ඔබට මුල් තන්තුවට වඩා වෙනස් ආකෘතියකින් දිනය සහ වේලාව නිරූපණය කළ හැක.

print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30

ඔබ එය දින කාල වස්තුවක් බවට පරිවර්තනය කරන්නේ නම්, ඔබට 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