កាលបរិច្ឆេទបណ្ណាល័យស្តង់ដាររបស់ 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 ។
- អ្នកបង្កើតសម្រាប់វត្ថុ 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
ការបំប្លែងវត្ថុកាលបរិច្ឆេទទៅវត្ថុកាលបរិច្ឆេទ
វត្ថុកាលបរិច្ឆេទកាលបរិច្ឆេទអាចត្រូវបានបម្លែងទៅជាវត្ថុកាលបរិច្ឆេទដោយវិធីសាស្ត្រ 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
វត្ថុ timedelta
វត្ថុ timedelta គឺជាវត្ថុដែលតំណាងឱ្យភាពខុសគ្នារវាងកាលបរិច្ឆេទនិងពេលវេលាពីរ ឬពេលវេលាដែលបានកន្លងផុតទៅ។ វាមានព័ត៌មានជាថ្ងៃ វិនាទី និងមីក្រូវិនាទី ហើយអាចចូលប្រើបានដោយគុណលក្ខណៈថ្ងៃ វិនាទី និងមីក្រូវិនាទី។ វាក៏អាចទទួលបានចំនួនវិនាទីសរុបដោយប្រើវិធីសាស្រ្ត total_seconds()។
ដកវត្ថុកាលបរិច្ឆេទ និងកាលបរិច្ឆេទដើម្បីបង្កើតវត្ថុ timedelta ។
ការដកវត្ថុកាលបរិច្ឆេទកាលបរិច្ឆេទពីគ្នាទៅវិញទៅមកផ្តល់ផលវត្ថុ 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 អាចត្រូវបានប្រើជាមួយនឹងវត្ថុកាលបរិច្ឆេទ និងកាលបរិច្ឆេទដើម្បីធ្វើប្រតិបត្តិការដូចជាការដក និងបូក។ ឧទាហរណ៍ អ្នកអាចគណនាយ៉ាងងាយស្រួល និងទទួលបានកាលបរិច្ឆេទមួយសប្តាហ៍មុន ឬ 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']
- អត្ថបទដែលទាក់ទង:ការប្រើសញ្ញាសម្គាល់ការយល់បញ្ជី Python
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