บทนำ
ข้อมูลสามารถแสดงได้ในรูปแบบต่างๆ และเป็นวิธีที่สะดวกในการแสดงวันที่และเวลา เงื่อนไข. อย่างไรก็ตาม เพื่อทำงานกับวันที่และเวลาเหล่านี้ในรูปแบบทางคณิตศาสตร์ (เช่น การคำนวณความแตกต่างของเวลา การเพิ่มหรือลบเวลา เป็นต้น) เราจำเป็นต้องแปลงให้เป็น datetime
วัตถุ.
หนึ่งในแหล่งที่พบมากที่สุดของ วันที่และเวลาในรูปแบบสตริง คือ REST API ที่ส่งคืนสตริงที่ไม่เชื่อเรื่องพระเจ้า ซึ่งเราสามารถแปลงเป็นรูปแบบอื่นได้
นอกจากนี้ เขตเวลามักเป็นเรื่องที่น่าปวดหัวเมื่อต้องทำงานกับออบเจ็กต์วันที่และเวลา ดังนั้น เราจะต้องคิดถึงเรื่องนั้นขณะแปลงด้วยเช่นกัน
ในคู่มือนี้ เราจะมาดูวิธีแปลงวันที่/เวลาของสตริงให้เป็น
datetime
วัตถุใน Python โดยใช้บิวด์อินdatetime
โมดูล แต่ยังรวมไปถึงโมดูลของบุคคลที่สามเช่นdateutil
,arrow
และ Maya การบัญชีสำหรับเขตเวลา
การแปลงสตริงโดยใช้วันที่และเวลา
พื้นที่ วันเวลา โมดูลประกอบด้วยอ็อบเจ็กต์ที่แตกต่างกันสามประเภท: date
, time
และ datetime
. date
วัตถุถือวันที่ time
จับเวลาและ datetime
มีทั้งวันที่และเวลา!
import datetime
print(f'Current date/time: {datetime.datetime.now()}')
การเรียกใช้รหัสนี้จะส่งผลให้:
Current date/time: 2022-12-01 10:27:03.929149
เมื่อไม่ได้กำหนดการจัดรูปแบบแบบกำหนดเอง ระบบจะใช้รูปแบบสตริงเริ่มต้น เช่น รูปแบบสำหรับ “2022-12-01 10:27:03.929149” อยู่ใน ISO.8601 รูป (ปปปป-ดด-ววTHH:ดด:สส.mmmmmm). หากสตริงอินพุตของเราสร้าง datetime
ออบเจ็กต์อยู่ในรูปแบบ ISO 8601 เดียวกัน หรือหากคุณทราบรูปแบบที่คุณจะได้รับล่วงหน้า เราสามารถแยกวิเคราะห์เป็น datetime
วัตถุ:
import datetime
date_time_str = '2022-12-01 10:27:03.929149'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')
print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
การเรียกใช้งานจะพิมพ์วันที่ เวลา และวันที่-เวลา:
Date: 2022-12-01
Time: 10:27:03.929149
Date-time: 2022-12-01 10:27:03.929149
ที่นี่เราใช้ไฟล์ strptime()
วิธีการซึ่งยอมรับสองข้อโต้แย้ง:
- วันที่จัดรูปแบบสตริง
- รูปแบบของอาร์กิวเมนต์แรก
การระบุรูปแบบเช่นนี้จะทำให้การแยกวิเคราะห์เร็วขึ้นมาก datetime
ไม่จำเป็นต้องพยายามตีความรูปแบบด้วยตัวเอง ซึ่งมีราคาแพงกว่ามากในการคำนวณ ค่าที่ส่งคืนเป็นประเภท datetime
.
ในตัวอย่างของเรา "2022-12-01 10:27:03.929149"
คือสตริงอินพุตและ "%Y-%m-%d %H:%M:%S.%f"
คือรูปแบบของสตริงวันที่ของเรา ที่ส่งคืน datetime
ค่าจะถูกเก็บไว้เป็น date_time_obj
.
ตั้งแต่นี้เป็น datetime
วัตถุเราสามารถเรียก date()
และ time()
วิธีการต่างๆ โดยตรง อย่างที่คุณเห็นจากเอาต์พุต มันจะพิมพ์ส่วน 'วันที่' และ 'เวลา' ของสตริงอินพุต!
ฟอร์แมตโทเค็น
มันคุ้มค่าที่จะใช้เวลาสักครู่เพื่อทำความเข้าใจ โทเค็นรูปแบบ - "%Y-%m-%d %H:%M:%S.%f"
จากเมื่อก่อน
แต่ละโทเค็นแสดงถึงส่วนที่แตกต่างกันของวันที่-เวลา เช่น วัน เดือน ปี วันของเดือนหรือสัปดาห์ เป็นต้น รายการโทเค็นที่รองรับ กว้างขวางเพียงพอที่จะเปิดใช้งานการจัดรูปแบบต่างๆ บางส่วนที่ใช้กันทั่วไปที่เราเคยใช้ก่อนหน้านี้คือ:
%Y
: ปี (ตัวเลข 4 หลัก)%m
: เดือน%d
: วันของเดือน%H
: ชั่วโมง (24 ชั่วโมง)%M
: นาที%S
: วินาที%f
: ไมโครวินาที
หมายเหตุ โทเค็นทั้งหมดเหล่านี้ ยกเว้นปี คาดว่าจะมีค่าเป็นศูนย์ (เช่น เดือนสิงหาคมเป็นเดือนที่ 8 และมีค่าเป็นศูนย์สำหรับ 08
).
การใช้ strptime() ฟอร์แมตโทเค็นเพื่อแปลงสตริงเป็นรูปแบบวันที่และเวลาอื่น
หากทราบรูปแบบของสตริง ก็สามารถแยกวิเคราะห์เป็น a ได้อย่างง่ายดาย datetime
วัตถุที่ใช้ strptime()
. ลองมาดูตัวอย่างเล็กๆ น้อยๆ ที่แปลจากรูปแบบหนึ่งไปอีกรูปแบบหนึ่ง:
import datetime
date_time_str = 'Jul 17 2022 9:20AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')
print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
สตริงอินพุตอยู่ในรูปแบบเดียว – “17 ก.ค. 2022 เวลา 9:20 น.” เมื่อทราบรูปแบบนี้ เราจึงแมปองค์ประกอบที่เป็นองค์ประกอบกับรูปแบบ ISO 8601 และแปลงเป็น datetime
วัตถุ:
Date: 2022-07-17
Time: 09:20:00
Date-time: 2022-07-17 09:20:00
ต่อไปนี้เป็นรายการสั้นๆ ของวันที่และเวลาในรูปแบบสตริงทั่วไปและรูปแบบที่เกี่ยวข้อง strptime()
:
"Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p"
"September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S"
"Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p"
"Mon, 21 March, 2015" -> "%a, %d %B, %Y"
"2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ"
คุณสามารถแยกวิเคราะห์สตริงวันที่-เวลาของรูปแบบใดๆ ก็ได้ ตราบใดที่คุณใช้สตริงโทเค็นรูปแบบที่ถูกต้องสำหรับอินพุตที่คุณได้รับ
แปลงสตริงเป็นวันที่และเวลาด้วยเขตเวลา
การจัดการวันที่-เวลาจะซับซ้อนมากขึ้นในขณะที่ต้องจัดการกับเขตเวลา ตัวอย่างข้างต้นทั้งหมดยังไร้เดียงสาต่อเขตเวลา สิ่งเหล่านี้เรียกว่า วัตถุ datetime ที่ไร้เดียงสา.
อย่างไรก็ตาม datetime
วัตถุมีฟิลด์สำหรับจัดเก็บข้อมูลที่เกี่ยวข้องกับเขตเวลาอย่างแน่นอน - tzinfo
:
import datetime as dt
dtime = dt.datetime.now()
print(dtime)
print(dtime.tzinfo)
พื้นที่ tzinfo
ฟิลด์นี้หมายถึงการเป็น datetime.timezone
วัตถุแสดงถึงข้อมูลเขตเวลา ของมัน None
โดยค่าเริ่มต้น และแสดงว่าวัตถุ datetime เป็นเขตเวลาไร้เดียงสา ไลบรารีภายนอกทั่วไปสำหรับการจัดการเขตเวลาคือ pytz
. คุณสามารถตั้งค่า พีทซ์ วัตถุเป็น tzinfo
ภาคสนามด้วย
หากคุณยังไม่มี ให้ติดตั้งผ่าน:
$ pip install pytz
เมื่อใช้ PyTz เราสามารถสร้างจุดยึดสำหรับวันที่และเวลาที่ทราบโซนเวลา เช่น UTC:
import datetime as dt
import pytz
dtime = dt.datetime.now(pytz.utc)
print(dtime)
print(dtime.tzinfo)
Output:
2022-12-01 02:07:41.960920+00:00
UTC
ไม่ใช่ 11 น. อีกต่อไป แต่เป็น 2 น. เพราะเราได้ตั้งค่าเขตเวลาย้อนกลับไปสองสามชั่วโมง! นี้ เปลี่ยนเขตเวลา ของวันที่และเวลา
+00:00
คือความแตกต่างระหว่างเวลาที่แสดงและเวลา UTC ในฐานะจุดยึดการประสานงานทั่วโลก เราได้ตั้งเวลาให้เป็น UTC ดังนั้นค่าชดเชยจึงเป็นเช่นนั้น 00:00
. นี่คือ วัตถุที่ทราบเขตเวลา.
ในทำนองเดียวกัน เราสามารถสลับการตีความวันที่และเวลาเดียวกันระหว่างเขตเวลาได้ มาแปลงสตริง เช่น “2022-06-29 17:08:00” เป็นวันที่และเวลา จากนั้น แปล ไปยังเขตเวลา “อเมริกา/นิวยอร์ก”:
import datetime as dt
import pytz
date_time_str = '2022-06-29 17:08:00'
date_time_obj = dt.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S')
timezone = pytz.timezone('America/New_York')
timezone_date_time_obj = timezone.localize(date_time_obj)
print(timezone_date_time_obj)
print(timezone_date_time_obj.tzinfo)
หมายเหตุ การปรับเนื้อหาให้สอดคล้องกับท้องถิ่น เปลี่ยนวันที่และเวลาแบบไม่มีเขตเวลาให้เป็นวันที่และเวลาที่ทราบเขตเวลา และถือว่าเขตเวลาเป็นเขตเวลาท้องถิ่น ดังนั้น วันที่และเวลายังคงเหมือนเดิมแต่ด้วยเขตเวลาที่ต่างกัน จึงไม่แสดงถึงจุดเดียวกันในเวลาที่ไม่ได้ผูกจากเขตเวลาอีกต่อไป
เราได้รับเหมือนกัน ค่าวันที่และเวลา, ชดเชยด้วย -04: 00 เปรียบเทียบกับเวลา UTC:
2022-06-29 17:08:00-04:00
America/New_York
17:08 น. ที่โตเกียว ไม่ใช่ เวลาเดียวกับ 17:08 น. ในนิวยอร์ก 17:08 น. ในโตเกียว คือ 3:08 น. ในนิวยอร์ก
จะค้นหารหัส/นามแฝงเขตเวลาทั้งหมดได้อย่างไร
หากต้องการค้นหาเขตเวลาที่มีอยู่ทั้งหมด ให้ตรวจสอบ all_timezones
ซึ่งเป็นรายการเขตเวลาที่มีอยู่ทั้งหมด:
print(f'There are {len(pytz.all_timezones)} timezones in PyTzn')
for time_zone in pytz.all_timezones:
print(time_zone)
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
There are 594 timezones in PyTz
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
...
เปลี่ยนเขตเวลาของ Datetime
เราสามารถแปลงเขตเวลาของเขตเวลาที่ทราบได้ datetime
วัตถุจากภูมิภาคหนึ่งไปยังอีกภูมิภาคหนึ่ง แทนที่จะแปลวันที่และเวลาแบบไร้เดียงสาตามเขตเวลาผ่านเลนส์ของเขตเวลาบางเขต
สิ่งนี้แตกต่างจากการแปลเป็นภาษาท้องถิ่น เนื่องจากการแปลเป็นภาษาท้องถิ่นแสดงถึงจุดในเวลาที่แตกต่างกัน แต่การแปลงเขตเวลาของออบเจ็กต์แสดงถึงจุดเวลาเดียวกันผ่านเลนส์ที่แตกต่างกัน:
import datetime as dt
import pytz
timezone_nw = pytz.timezone('America/New_York')
nw_datetime_obj = dt.datetime.now(timezone_nw)
timezone_london = pytz.timezone('Europe/London')
london_datetime_obj = nw_datetime_obj.astimezone(timezone_london)
print('America/New_York:', nw_datetime_obj)
print('Europe/London:', london_datetime_obj)
ขั้นแรก เราสร้างออบเจ็กต์ datetime หนึ่งรายการพร้อมเวลาปัจจุบันและตั้งค่าเป็นเขตเวลา "อเมริกา/นิวยอร์ก" จากนั้นใช้ astimezone()
วิธีการ เราได้แปลงสิ่งนี้แล้ว datetime
ไปยังเขตเวลา “ยุโรป/ลอนดอน” ทั้งคู่ datetime
s จะพิมพ์ค่าที่แตกต่างกัน โดยใช้ UTC offset เป็นลิงค์อ้างอิงระหว่างค่าเหล่านั้น:
America/New_York: 2022-11-30 21:24:30.123400-05:00
Europe/London: 2022-12-01 02:24:30.123400+00:00
2:24 วันรุ่งขึ้นในลอนดอน is เวลาเดียวกับ 21:24 วันก่อนหน้าในนิวยอร์ก เนื่องจากลอนดอนเร็วกว่า 5 ชั่วโมง
ตามที่คาดไว้ วันที่-เวลาจะแตกต่างกันเนื่องจากห่างกันประมาณ 5 ชั่วโมง
แปลงสตริงเป็น Datetime โดยใช้ไลบรารีบุคคลที่สาม
Python ของ datetime
โมดูลสามารถแปลงสตริงประเภทต่างๆ ให้เป็น a datetime
วัตถุ. แต่ปัญหาหลักคือในการดำเนินการนี้ คุณจะต้องสร้างสตริงโค้ดการจัดรูปแบบที่เหมาะสม strptime()
สามารถเข้าใจ. การสร้างสตริงนี้ต้องใช้เวลาและทำให้โค้ดอ่านยากขึ้น
แต่เราสามารถใช้ไลบรารีของบุคคลที่สามอื่นเพื่อทำให้ง่ายขึ้นได้
ในบางกรณี ไลบรารีบุคคลที่สามเหล่านี้ยังรองรับการจัดการและเปรียบเทียบวันที่-เวลาในตัวได้ดีกว่า และบางไลบรารีก็มีเขตเวลาในตัวด้วย ดังนั้นคุณไม่จำเป็นต้องรวมแพ็คเกจ PyTz เพิ่มเติม
ลองมาดูห้องสมุดเหล่านี้บางส่วนในส่วนต่อไปนี้
แปลงสตริงเป็น Datetime ด้วย dateutil
พื้นที่ โมดูล dateutil เป็นส่วนเสริมของ datetime
โมดูล. ข้อดีอย่างหนึ่งคือเราไม่จำเป็นต้องส่งรหัสแยกวิเคราะห์เพื่อแยกสตริง!
หากต้องการแปลงสตริงเป็นวันที่และเวลาโดยอัตโนมัติโดยไม่ต้องใช้โทเค็นรูปแบบโดยใช้ Python dateutil
:
from dateutil.parser import parse
datetime = parse('2018-06-29 22:21:41')
print(datetime)
parse
ฟังก์ชั่นจะแยกวิเคราะห์สตริงโดยอัตโนมัติ! คุณไม่จำเป็นต้องรวมสตริงรูปแบบใดๆ เรามาลองแยกสตริงประเภทต่างๆ โดยใช้กัน dateutil
:
from dateutil.parser import parse
date_array = [
'2018-06-29 08:15:27.243860',
'Jun 28 2018 7:40AM',
'Jun 28 2018 at 7:40AM',
'September 18, 2017, 22:19:55',
'Sun, 05/12/1999, 12:30PM',
'Mon, 21 March, 2015',
'2018-03-12T10:12:45Z',
'2018-06-29 17:08:00.586525+00:00',
'2018-06-29 17:08:00.586525+05:00',
'Tuesday , 6th September, 2017 at 4:30pm'
]
for date in date_array:
print('Parsing: ' + date)
dt = parse(date)
print(dt.date())
print(dt.time())
print(dt.tzinfo)
print('n')
Output:
Parsing: 2018-06-29 08:15:27.243860
2018-06-29
08:15:27.243860
None
Parsing: Jun 28 2018 7:40AM
2018-06-28
07:40:00
None
Parsing: Jun 28 2018 at 7:40AM
2018-06-28
07:40:00
None
Parsing: September 18, 2017, 22:19:55
2017-09-18
22:19:55
None
Parsing: Sun, 05/12/1999, 12:30PM
1999-05-12
12:30:00
None
Parsing: Mon, 21 March, 2015
2015-03-21
00:00:00
None
Parsing: 2018-03-12T10:12:45Z
2018-03-12
10:12:45
tzutc()
Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29
17:08:00.586525
tzutc()
Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29
17:08:00.586525
tzoffset(None, 18000)
Parsing: Tuesday , 6th September, 2017 at 4:30pm
2017-09-06
16:30:00
None
คุณจะเห็นว่าสตริงเกือบทุกประเภทสามารถแยกวิเคราะห์ได้อย่างง่ายดายโดยใช้ dateutil
โมดูล.
แม้ว่าวิธีนี้จะสะดวก แต่จำไว้ก่อนหน้านี้ว่าการต้องคาดเดารูปแบบจะทำให้โค้ดช้าลงมาก ดังนั้นหากโค้ดของคุณต้องการประสิทธิภาพสูง นี่อาจไม่ใช่แนวทางที่เหมาะสมสำหรับแอปพลิเคชันของคุณ
แปลงสตริงเป็น Datetime ด้วย Maya
อินเดียนแดงเผ่ามายะ ยังทำให้การแยกวิเคราะห์สตริงและเปลี่ยนเขตเวลาเป็นเรื่องง่ายมาก วิธีแปลงสตริงอย่างง่ายดายด้วย Maya ของ Python:
import maya
dt = maya.parse('2018-04-29T17:45:25Z').datetime()
print(dt.date())
print(dt.time())
print(dt.tzinfo)
Output:
2018-04-29
17:45:25
UTC
สำหรับการแปลงเวลาเป็นเขตเวลาอื่น:
import maya
dt = maya.parse('2018-04-29T17:45:25Z').datetime(to_timezone='America/New_York', naive=False)
print(dt.date())
print(dt.time())
print(dt.tzinfo)
Output:
2018-04-29
13:45:25
America/New_York
ตอนนี้มันใช้งานไม่ได้ง่ายขนาดนั้นเหรอ? มาลองดูกัน maya
ด้วยชุดสตริงเดียวกันกับที่เราเคยใช้ dateutil
:
import maya
date_array = [
'2018-06-29 08:15:27.243860',
'Jun 28 2018 7:40AM',
'Jun 28 2018 at 7:40AM',
'September 18, 2017, 22:19:55',
'Sun, 05/12/1999, 12:30PM',
'Mon, 21 March, 2015',
'2018-03-12T10:12:45Z',
'2018-06-29 17:08:00.586525+00:00',
'2018-06-29 17:08:00.586525+05:00',
'Tuesday , 6th September, 2017 at 4:30pm'
]
for date in date_array:
print('Parsing: ' + date)
dt = maya.parse(date).datetime()
print(dt)
Output:
Parsing: 2018-06-29 08:15:27.243860
2018-06-29 08:15:27.243860+00:00
Parsing: Jun 28 2018 7:40AM
2018-06-28 07:40:00+00:00
Parsing: Jun 28 2018 at 7:40AM
2018-06-28 07:40:00+00:00
Parsing: September 18, 2017, 22:19:55
2017-09-18 22:19:55+00:00
Parsing: Sun, 05/12/1999, 12:30PM
1999-05-12 12:30:00+00:00
Parsing: Mon, 21 March, 2015
2015-03-21 00:00:00+00:00
Parsing: 2018-03-12T10:12:45Z
2018-03-12 10:12:45+00:00
Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29 17:08:00.586525+00:00
Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29 12:08:00.586525+00:00
Parsing: Tuesday , 6th September, 2017 at 4:30pm
2017-09-06 16:30:00+00:00
อย่างที่คุณเห็น รูปแบบวันที่ทั้งหมดได้รับการแยกวิเคราะห์เรียบร้อยแล้ว!
หากเราไม่ระบุข้อมูลเขตเวลา ระบบจะแปลงเป็น UTC โดยอัตโนมัติ ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องทราบว่าเรา ต้อง ให้ to_timezone
และ naive
พารามิเตอร์หากเวลาไม่อยู่ใน UTC
แปลงสตริงเป็น Datetime ด้วยลูกศร
ลูกศร เป็นอีกหนึ่งไลบรารีสำหรับจัดการกับ datetime ใน Python และเหมือนเมื่อก่อนด้วย maya
และยังระบุรูปแบบวันที่และเวลาโดยอัตโนมัติอีกด้วย เมื่อตีความแล้วจะส่งคืน Python datetime
วัตถุจาก arrow
วัตถุ.
หากต้องการแปลงสตริงเป็นวันที่และเวลาอย่างง่ายดายโดยใช้ Python arrow
:
import arrow
dt = arrow.get('2018-04-29T17:45:25Z')
print(dt.date())
print(dt.time())
print(dt.tzinfo)
Output:
2018-04-29
17:45:25
tzutc()
และนี่คือวิธีที่คุณสามารถใช้ arrow
เพื่อแปลงเขตเวลาโดยใช้ to()
วิธี:
import arrow
dt = arrow.get('2018-04-29T17:45:25Z').to('America/New_York')
print(dt)
print(dt.date())
print(dt.time())
Output:
2018-04-29T13:45:25-04:00
2018-04-29
13:45:25
ดังที่คุณเห็นว่าสตริงวันที่-เวลาถูกแปลงเป็นภูมิภาค “อเมริกา/นิวยอร์ก”
ตอนนี้ เรามาใช้ชุดสตริงเดียวกันกับที่เราใช้ด้านบนอีกครั้ง:
import arrow
date_array = [
'2018-06-29 08:15:27.243860',
'2018-03-12T10:12:45Z',
'2018-06-29 17:08:00.586525+00:00',
'2018-06-29 17:08:00.586525+05:00',
]
for date in date_array:
dt = arrow.get(date)
print('Parsing: ' + date)
print(dt)
รหัสนี้จะล้มเหลวสำหรับสตริงวันที่-เวลาที่ถูกใส่เครื่องหมายความคิดเห็น ซึ่งเป็นมากกว่าครึ่งหนึ่งของตัวอย่างของเรา ผลลัพธ์สำหรับสตริงอื่นๆ จะเป็น:
Parsing: 2018-06-29 08:15:27.243860
2018-06-29T08:15:27.243860+00:00
Parsing: 2018-03-12T10:12:45Z
2018-03-12T10:12:45+00:00
Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29T17:08:00.586525+00:00
Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29T17:08:00.586525+05:00
เพื่อที่จะแยกวิเคราะห์สตริงวันที่-เวลาที่มีการใส่เครื่องหมายความคิดเห็นไว้อย่างถูกต้อง คุณจะต้องส่งผ่านสตริงที่เกี่ยวข้อง โทเค็นรูปแบบ เพื่อให้เบาะแสแก่ห้องสมุดเกี่ยวกับวิธีการแยกวิเคราะห์
สรุป
ในบทความนี้ เราได้แสดงวิธีต่างๆ ที่จะแยกวิเคราะห์สตริงเป็น datetime
วัตถุในหลาม คุณสามารถเลือกใช้ Python เริ่มต้นได้ datetime
ไลบรารีหรือไลบรารีของบุคคลที่สามที่กล่าวถึงในบทความนี้ และอื่นๆ อีกมากมาย
ปัญหาหลักกับค่าเริ่มต้น datetime
package คือเราจำเป็นต้องระบุโค้ดการแยกวิเคราะห์ด้วยตนเองสำหรับรูปแบบสตริงวันที่-เวลาเกือบทั้งหมด ดังนั้น หากรูปแบบสตริงของคุณเปลี่ยนแปลงในอนาคต คุณอาจต้องเปลี่ยนโค้ดของคุณด้วย แต่ไลบรารีบุคคลที่สามจำนวนมาก เช่นเดียวกับที่กล่าวถึงในที่นี้จะจัดการโดยอัตโนมัติ
ปัญหาอีกประการหนึ่งที่เราเผชิญคือการจัดการกับเขตเวลา วิธีที่ดีที่สุดในการจัดการคือจัดเก็บเวลาในฐานข้อมูลของคุณในรูปแบบ UTC แล้วแปลงเป็นเขตเวลาท้องถิ่นของผู้ใช้เมื่อจำเป็น
ไลบรารีเหล่านี้ไม่เพียงแต่ดีสำหรับการแยกวิเคราะห์สตริงเท่านั้น แต่ยังใช้สำหรับการดำเนินการที่เกี่ยวข้องกับวันที่-เวลาประเภทต่างๆ มากมาย ฉันขอแนะนำให้คุณอ่านเอกสารเพื่อเรียนรู้ฟังก์ชันการทำงานโดยละเอียด