top of page

ข้อมูลวันที่ และเวลา datetime และ time

Updated: Aug 15, 2021

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




42 views0 comments

Comments


bottom of page