ដោយប្រើកាលបរិច្ឆេទបណ្ណាល័យស្តង់ដាររបស់ Python អ្នកអាចបង្កើតវត្ថុកាលបរិច្ឆេទកាលបរិច្ឆេទពីខ្សែអក្សរកាលបរិច្ឆេទ ហើយយកឈ្មោះថ្ងៃនៃសប្តាហ៍ ឬខែពីវាជាខ្សែអក្សរ។ ទោះយ៉ាងណាក៏ដោយ ភាសានៃខ្សែអក្សរទាំងនោះអាស្រ័យលើមូលដ្ឋាន (ការកំណត់ប្រទេស ឬតំបន់) នៃបរិស្ថាន។
នេះគឺជាវិធីពីរយ៉ាងដើម្បីទទួលបានឈ្មោះថ្ងៃនៃសប្តាហ៍ ឬខែពីកាលបរិច្ឆេទជាខ្សែអក្សរនៅក្នុងភាសាណាមួយ។
- ផ្លាស់ប្តូរមូលដ្ឋានដោយប្រើម៉ូឌុលមូលដ្ឋាន
- កំណត់មុខងារថ្មី។
សម្រាប់ព័ត៌មានបន្ថែមស្តីពីការប្រើប្រាស់ជាមូលដ្ឋាននៃម៉ូឌុលកាលបរិច្ឆេទ និងវិធីសាស្ត្រ strptime() និង strftime() សម្រាប់បំប្លែងរវាងកាលបរិច្ឆេទ និងពេលវេលា (កាលបរិច្ឆេទ ពេលវេលា) និងខ្សែអក្សរ សូមយោងលើអត្ថបទខាងក្រោម។
- អត្ថបទដែលទាក់ទង:ការបំប្លែងកាលបរិច្ឆេទ និងម៉ោងទៅ និងពីខ្សែអក្សរជាមួយនឹងកាលបរិច្ឆេទរបស់ Python(
strftime
,strptime
)
ផ្លាស់ប្តូរមូលដ្ឋានដោយប្រើម៉ូឌុលមូលដ្ឋាន
បណ្ណាល័យស្តង់ដារ Python ផ្តល់ម៉ូឌុលមូលដ្ឋានដើម្បីគ្រប់គ្រងការកំណត់មូលដ្ឋាន។
វាអាស្រ័យលើបរិស្ថាន ប៉ុន្តែនៅក្នុងបរិយាកាសឧទាហរណ៍ ដោយប្រើកូដទម្រង់ខាងក្រោមក្នុងវិធីសាស្ត្រ strftime() ឈ្មោះថ្ងៃនៃសប្តាហ៍ និងខែអាចទទួលបានជាភាសាអង់គ្លេស។%A
,%a
,%B
,%b
ឧទាហរណ៍ខាងក្រោមប្រើវត្ថុកាលបរិច្ឆេទដើម្បីតំណាងឱ្យកាលបរិច្ឆេទនិងពេលវេលា (កាលបរិច្ឆេទនិងពេលវេលា) ប៉ុន្តែដូចគ្នាចំពោះវត្ថុកាលបរិច្ឆេទដែលមានតែព័ត៌មានកាលបរិច្ឆេទប៉ុណ្ណោះ។
import datetime
import locale
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
LC_TIME ដែលជាការកំណត់ប្រភេទមូលដ្ឋានសម្រាប់ការធ្វើទ្រង់ទ្រាយពេលវេលាត្រូវបានពិនិត្យជាមួយ locale.getlocale() ហើយវាត្រូវបានកំណត់ទៅគ្មាន។ លទ្ធផលនេះអាស្រ័យលើបរិស្ថាន។
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME ទៅភាសាជប៉ុន (UTF-8) ja_JP.UTF-8 នៅក្នុង locale.setlocale() ដើម្បីទទួលបានឈ្មោះថ្ងៃ និងខែជាភាសាជប៉ុន។ locale.LC_ALL អាចត្រូវបានប្រើដើម្បីកំណត់ប្រភេទមូលដ្ឋានទាំងអស់ ប៉ុន្តែចំណាំថាវានឹងប៉ះពាល់ដល់ឧទាហរណ៍ LC_MONETARY ជាឧទាហរណ៍។
ចំណាំថាការផ្លាស់ប្តូរទាំងនេះមានប្រសិទ្ធភាពតែនៅក្នុងកូដនេះប៉ុណ្ណោះ។ វាមិនមានន័យថាអថេរបរិស្ថានប្រព័ន្ធនឹងត្រូវបានសរសេរឡើងវិញទេ។
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
print(locale.getlocale(locale.LC_TIME))
# ('ja_JP', 'UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# 月曜日, 月, 1月, 1
អ្នកក៏អាចផ្លាស់ប្តូរការកំណត់មូលដ្ឋាន ដើម្បីប្រើសញ្ញាសម្គាល់ភាសាផ្សេងទៀត ដូចជាភាសាអង់គ្លេស ឬអាល្លឺម៉ង់។
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Montag, Mo, Januar, Jan
ប្រសិនបើអ្នកចង់ទទួលបានថ្ងៃនៃសប្តាហ៍សម្រាប់កាលបរិច្ឆេទដែលបានផ្តល់ឱ្យពីខ្សែអក្សរកាលបរិច្ឆេទនៅក្នុងភាសាណាមួយ អ្នកអាចធ្វើដូច្នេះបានដោយធ្វើតាមជំហានខាងក្រោម។
- LC_TIME ទៅតម្លៃនៃការកំណត់ភាសាដែលចង់បាន (ឧ. ja_JP.UTF-8) ក្នុង locale.setlocale()
- ការបំប្លែងខ្សែអក្សរទៅជាវត្ថុកាលបរិច្ឆេទជាមួយ strptime()
- ហៅទៅ strftime() នៅលើវត្ថុកាលបរិច្ឆេទនោះជាមួយនឹងកូដទម្រង់ខាងក្រោម:
%A
,%a
,%B
,%b
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
s = '2018-01-01'
s_dow = datetime.datetime.strptime(s, '%Y-%m-%d').strftime('%A')
print(s_dow)
# 月曜日
កំណត់មុខងារថ្មី។
នេះអាចសម្រេចបានដោយការកំណត់មុខងារថ្មី។
វិធីសាស្ត្រថ្ងៃធ្វើការ () នៃកាលបរិច្ឆេទកាលបរិច្ឆេទផ្តល់តម្លៃចំនួនគត់នៃ 0 សម្រាប់ថ្ងៃច័ន្ទ និង 6 សម្រាប់ថ្ងៃអាទិត្យ។
import datetime
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.weekday())
# 0
print(type(dt.weekday()))
# <class 'int'>
មានវិធីសាស្រ្តស្រដៀងគ្នា isoweekday() ដែលត្រឡប់តម្លៃចំនួនគត់នៃ 1 សម្រាប់ថ្ងៃច័ន្ទ និង 7 សម្រាប់ថ្ងៃអាទិត្យ។ ចំណាំថាមានភាពខុសគ្នាបន្តិចបន្តួច។
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
ប្រសិនបើយើងកំណត់បញ្ជីឈ្មោះនៃថ្ងៃនៃសប្តាហ៍សម្រាប់ខ្សែអក្សរភាសានីមួយៗ ហើយទាញយកពួកវាដោយប្រើតម្លៃចំនួនគត់ដែលទទួលបានដោយវិធីសាស្ត្រថ្ងៃធ្វើការ() នោះយើងអាចសម្រេចបាននូវគោលដៅរបស់យើង។