object เฉพาะที่ใช้นับเวลา และวันที่ ที่มาพร้อมกับต้นกำเนิดของเวลา!? พร้อมเปรียบเทียบว่าใช้แล้วชีวิตดีขึ้นอย่างไร
เวลา และวันที่
เป็นข้อมูลอีกกลุ่มของข้อมูลที่มีความสำคัญในการทำงานกับการใช้งาน Python ไม่ว่าจะเพื่อการจัดการข้อมูลประเภทดังกล่าว หรือการใช้สร้างเงื่อนไขเพื่อเพิ่มเวลาเข้าเป็นส่วนหนึ่งของเงื่อนไขในโปรแกรมของเรา
ติดตั้งเครื่องมือ
In [1]:
!pip install datetime
Requirement already satisfied: datetime in c:\users\acer\anaconda3\lib\site-packages (4.3) Requirement already satisfied: pytz in c:\users\acer\anaconda3\lib\site-packages (from datetime) (2020.1) Requirement already satisfied: zope.interface in c:\users\acer\anaconda3\lib\site-packages (from datetime) (4.7.1) Requirement already satisfied: setuptools in c:\users\acer\anaconda3\lib\site-packages (from zope.interface->datetime) (49.2.0.post20200714)
นำเข้าเครื่องมือ
ในบทเรียนนี้เราจะเรียนเครื่องมือเบื้องต้นจาก library time และ datetime ซึ่งเป็นชุดคำสั่งที่ใช้จัดการเวลา และวันที่
In [2]:
import time
In [3]:
import datetime
เวลาจาก epoch
การนับเวลาใดๆ อาศัยการนับต่อเนื่องจากจุดเริ่มต้น สำหรับในโปรแกรมมีมาตรฐานการนับเวลาระบบหนึ่งที่ได้รับความนิยม และเป็นมาตรฐานเวลาที่เราจะใช้เป็นหลักในบทเรียนนี้ และในการเขียนโปรแกรมโดยทั่วไปนั่นคือ Unix epoch ซึ่งมีจุดเริ่มต้นของเวลาที่ วันที่ 1 เดือนมกราคม ปี 1970 เวลาเที่ยงคืน UTC เป็นจุดเริ่มต้นในระบบ Unix หรือ Unix Epoch ที่เริ่มต้นที่ค่า 0
Unix time เป็นชื่อของการนับเวลาในหน่วยวินาทีที่ผ่านจุด Unix epoch มา ซึ่งเป็นระบบการนับเวลาที่ได้รับความนิยมทั้งในการนับเวลาของระบบคอมพิวเตอร์ รวมไปถึงโทรศัพท์ หรือเครื่องมืออิเล็กทรอนิกส์
Unix time โดยคำสั่ง .time()
แสดงผลลัพธ์เป็นจำนวนวินาทีที่ผ่านมาจากจุด Unix time
In [4]:
time.time()
Out[4]:
1621585357.022427
วันเวลาจาก Unix time จากคำสั่ง .ctime()
แปลงค่าจาก unix time เป็นวันและเวลาที่ UTC สำหรับเวลาไทยจะใช้ GMT+7 หรือเวลา +7 ชั่วโมง จาก UTC
In [5]:
time.ctime()
Out[5]:
'Fri May 21 15:22:37 2021'
การทำงานกับวัน-เวลา
นอกเหนือจาก library time ยังมี library datetime ที่ใช้จัดการกับวันที่ และเวลาได้อย่างมีประสิทธิภาพเนื่องจากมีโครงสร้าง object ที่ทำให้สามารถดึง วัน ชั่วโมง นาที ปี เดือน ได้จาก ข้อมูลโดยตรง และมีเครื่องมือต่างๆ ทำให้การจัดการวันเวลาง่ายกว่า
เวลาปัจจุบันด้วย .datetime.now()
ในการทำงานกับวันเวลาของ datetime จะถูกสร้างเป็น object ประเภท datetime
In [6]:
dt = datetime.datetime.now()
Out[6]:
datetime.datetime(2021, 5, 21, 15, 22, 37, 70771)
การดึงข้อมูลจาก datetime
ในการเก็บข้อมูลใน datetime มีข้อมูลตั้งแต่ ปี เดือน วัน ชั่วโมง นาที วินาที ไปจนถึง เสี้ยววินาทีที่สามารถดึงได้โดยการใช้ attribute .year .month .day .hour .minute .second .microsecond
In [7]:
dt.year, dt.month, dt.day, dt.minute, dt.second, dt.microsecond
Out[7]:
(2021, 5, 21, 22, 37, 70771)
การสร้าง datetime
ในการใช้งานทั่วไป datetime จะเป็น object พื้นฐานสำหรับการจัดการข้อมูลประเภทวันที่ ซึ่งทำให้ datetime เป็นหนึ่งในข้อมูลพื้นฐานสำหรับการทำงานกับข้อมูลอย่างเช่นเรื่องของการจัดการข้อมูล การวิเคราะห์ time series เนื่องจากมีเครื่องมือหลากหลายสะดวกต่อการจัดการกับข้อมูลวันที่ ที่มีรายละเอียดเฉพาะข้อมูล
สร้าง datetime ด้วย unix time
ด้วยคำสั่ง .datetime.fromtimestamp() ซึ่งใส่ unix time เป็น input
In [8]:
datetime.datetime.fromtimestamp(time.time())
Out[8]:
datetime.datetime(2021, 5, 21, 15, 22, 37, 103685)
สร้าง datetime ด้วยการระบุค่า
ในการสร้าง datetime เราสามารถใช้คำสั่ง .datetime() ที่รับค่า ปี เดือน วัน ชั่วโมง นาที วินาที เสี้ยววินาที เพื่อสร้าง datetime ตามรายละเอียดที่กำหนดได้
In [9]:
dt = datetime.datetime(2021,1,1,0,0,0)
ส่วนต่างเวลา
สำหรับ library datetime ส่วนต่างของวันเวลาจะเก็บเอาไว้ใน object ประเภท timedelta ซึ่งเป็นข้อมูลที่บอกระยะห่างของเวลา 2 จุด
สร้าง Delta จากระยะห่างระหว่าง 2 datetime
In [10]:
new_year = datetime.datetime(2021,1,1,0,0,0)
today = datetime.datetime.now()
delta = today - new_year
delta
Out[10]:
datetime.timedelta(days=140, seconds=55357, microseconds=137593)
นำผลต่างไปเพิ่มเวลาของ datetime
In [11]:
new_year + delta
Out[11]:
datetime.datetime(2021, 5, 21, 15, 22, 37, 137593)
นำผลต่างไปนับเวลาย้อนหลังของ datetime
In [12]:
new_year - delta
Out[12]:
datetime.datetime(2020, 8, 13, 8, 37, 22, 862407)
การใช้งานจริง
เวลา และวันที่เป็นส่วนสำคัญของข้อมูลโดยทั่วไป และยังเป็นข้อมูลที่สามารถนำไปสร้างเป็นเงื่อนไขให้การทำงานของระบบของเรารับรู้ถึงการเปลี่ยนแปลงของเวลาตามที่ต้องการได้ด้วย และนอกจากนี้ ในเครื่องมือ time, datetime ยังมีหลายๆ เครื่องมือที่สามารถนำมาใช้เพื่อให้เราสามารถใช้ประโยชน์จากเวลาได้มากยิ่งขึ้น
คำสั่งให้หยุดรอ
สามารถใช้คำสั่ง time.sleep() ที่ใส่จำนวน วินาทีเป็น input เพื่อให้คอมพิวเตอร์หยุดรอ ก่อนที่จะทำงานในคำสั่งถัดไป สามารถประยุกต์ใช้ได้หลากหลายเช่น ใช้จัดการระยะห่างของแต่ละคำสั่ง การสั่งให้ยุดรอเพื่อรอโปรแกรมอื่นๆ โหลด หรือใช้ร่วมกับการสุ่มเวลาเพื่อให้เกิดการทำงานที่คาดเดาเวลาไม่ได้
In [13]:
time.sleep(2)
print('You just waste 2 seconds')
You just waste 2 seconds
จัดการข้อมูลวันเวลา
สำหรับ object datetime มีประโยชน์ในโครงสร้าง อย่างเช่น เราสามารถเปลี่ยนวันเวลาในรูปแบบของ string เป็น datetime เราจะสามารถเข้าถึงข้อมูลได้ง่ายขึ้น เช่น
In [14]:
string_today = '21/5/2021'
datetime_today = datetime.datetime(2021,5,21)
การดึงข้อมูลจาก string
สามารถใช้การดึงตำแหน่งข้อมูล หรือ regular expression เพื่อดึงข้อมูล ซึ่งผลลัพธ์จะได้เป็น string
In [15]:
string_today[-4:], string_today[-6], string_today[:2]
Out[15]:
('2021', '5', '21')
การดึงข้อมูลจาก datetime
สามารถทำได้โดยการใช้ attribute ที่ดึงข้อมูลมาได้เป็น integer
In [16]:
datetime_today.year, datetime_today.month, datetime_today.day
Out[16]:
(2021, 5, 21)
การเปลี่ยน datetime เป็น string
ในการจัดเก็บข้อมูล datetime อาจดูน่าสนใจกว่า แต่สำหรับการแสดงผล string อาจมีตัวเลือกมากกว่าเนื่องจากสามารถแสดงผลในรูปแบบใดก็ได้ เราสามารถเปลี่ยน datetime เป็น string เพื่อการแสดงผลได้ด้วยคำสั่ง .strftime() ตามหลัง object datetime
directive
ในการดึงข้อมูล datetime มาแสดงผลเป็น string เราจะใช้สิ่งที่เรียกว่า directive เพื่อดึงข้อมูลจาก datetime มาเป็น string และนำมาประกอบกับ string อื่นๆ เพื่อประกอบเป็นตัวอักษรที่ใช้แสดงผลสุดท้าย ซึ่งตัวอย่าง directive และข้อมูลที่ directive ดึงมาให้ ได้ตามนี้
%Y ดึงข้อมูลปีเป็นตัวเลข 4 ตัว, %B ดึงชื่อเดือนเต็ม, %d ดึงวันที่ ดู directive เพิ่มเติม
In [17]:
today = datetime.datetime.now()
today
Out[17]:
datetime.datetime(2021, 5, 21, 15, 22, 39, 279710)
In [18]:
today.strftime('%d/%B/%Y')
Out[18]:
'21/May/2021'
การเปลี่ยน string เป็น datetime
เราสามารถใช้คำสั่ง .datetime.strptime() เปลี่ยน string เป็น datetime ได้ โดยการใช้ directive เรียงในลักษณะเดียวกับ string และให้ .strptime() ไปดึงข้อมูลตามที่เรากำหนดสร้างเป็น datetime
directive
%y ใช้ดึงเลขปีที่แสดงเป็นหลักสิบ และหลักหน่วย (ตั้งแต่ปี 1970 ถึง 2069), %m ใช้ดึงเลขเดือน, %d ใช้ดึงวันที่
In [19]:
string_today = '21/5/21'
In [20]:
datetime_today = datetime.datetime.strptime(string_today,'%d/%m/%y')
In [21]:
datetime_today
Out[21]:
datetime.datetime(2021, 5, 21, 0, 0)
เสร็จสิ้นการทำงานกับเวลา และวันที่
เรียนเรียน Python จาก 0 ฉบับวัยทำงานยุคใหม่
เริ่มไว ใช้ได้ทันที พร้อมการดูแลจากผู้สอนโดยตรง และกลุ่มแลกเปลี่ยนความรู้
เรียนรู้เกี่ยวกับคอร์สเรียนเพิ่มเติม https://ultimatepython.teachable.com/p/python-automation
Comments