การแปลงสตริงเป็นวันที่และเวลาใน Python

บทนำ

ข้อมูลสามารถแสดงได้ในรูปแบบต่างๆ และเป็นวิธีที่สะดวกในการแสดงวันที่และเวลา เงื่อนไข. อย่างไรก็ตาม เพื่อทำงานกับวันที่และเวลาเหล่านี้ในรูปแบบทางคณิตศาสตร์ (เช่น การคำนวณความแตกต่างของเวลา การเพิ่มหรือลบเวลา เป็นต้น) เราจำเป็นต้องแปลงให้เป็น 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 ไปยังเขตเวลา “ยุโรป/ลอนดอน” ทั้งคู่ datetimes จะพิมพ์ค่าที่แตกต่างกัน โดยใช้ 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 แล้วแปลงเป็นเขตเวลาท้องถิ่นของผู้ใช้เมื่อจำเป็น

ไลบรารีเหล่านี้ไม่เพียงแต่ดีสำหรับการแยกวิเคราะห์สตริงเท่านั้น แต่ยังใช้สำหรับการดำเนินการที่เกี่ยวข้องกับวันที่-เวลาประเภทต่างๆ มากมาย ฉันขอแนะนำให้คุณอ่านเอกสารเพื่อเรียนรู้ฟังก์ชันการทำงานโดยละเอียด

ประทับเวลา:

เพิ่มเติมจาก สแต็ค