
การรู้เวลารูปแบบต่างๆ เป็นสิ่งจำเป็นเมื่อใช้ time module รูปแบบเวลาที่จำเป็นต้องรู้มีดังนี้
Epoch
จุดเริ่มต้นของเวลา จะนับจากระบบปฏิบัติการ Unix เริ่มตั้งแต่เวลา 00:00:00 ของวันที่ 1 มกราคม ค.ศ. 1970 ตามเวลา UTC
UTC
Coordinated Universal Time คือเวลาสากลเชิงพิกัด หมายความว่าไม่ว่าเราจะอยู่ที่ไหน ประเทศใดก็ตาม เวลาในระบบ UTC จะเป็นเวลาเดียวกันทั่วโลก
GMT
Greenwich Mean Time หรือ เวลามาตรฐานกรีนิช หรือภาษาไทยนิยมเรียกว่าเวลามาตรฐานสากล เป็นเวลาที่เมืองกรีนิชเขตการปกครองของกรุงลอนดอนประเทศอังกฤษ มีการคำนวณจากค่าเฉลี่ยเวลาที่ดวงอาทิตย์ข้ามผ่านเส้นเมริเดียนปฐมและอยู่ในตำแหน่งสูงสุดตอนเที่ยงวันในรอบหนึ่งปี
เวลาแบบ UTC และ GMT ถูกใช้สลับกันบ่อยครั้งและหลายคนคิดว่ามันคือเวลาแบบเดียวกัน จริงๆแล้ว UTC และ GMT บอกเวลาเดียวกัน แต่ไม่ใช่เวลาชนิดเดียวกัน
UTC เป็น time standard ไม่มีประเทศใดในโลกใช้ UTC เป็นเวลาท้องถิ่น เรียกได้ว่า UTC เป็น time zones worldwide คือทั่วโลก ทุกประเทศใช้เวลา UTC เดียวกัน
GMT เป็น time zone ประเทศที่ใช้ GMT เป็นเวลาท้องถิ่นเช่น ประเทศอังกฤษ โปรตุเกส ไลบีเรีย เป็นต้น
เวลาท้องถิ่นของหลายประเทศ ต้องมีการบวกหรือลบชั่วโมงจากเวลา GMT เช่น เวลาท้องถิ่นของประเทศไทยคือ GMT+7 หมายความว่า ไม่ว่าเวลาที่ประเทศอังกฤษ(ซึ่งมีเวลาท้องถิ่นเป็น GMT )จะเป็นเท่าไหร่ก็ตาม เวลาท้องถิ่นในประเทศไทยต้องบวกเพิ่มเข้าไปอีก 7 ชั่วโมง ในขณะที่เวลาท้องถิ่นของประเทศอาร์เจนติน่าคือ GMT-3 หมายความว่าต้องลบ 3 ชั่วโมงออกจากเวลา GMT
Python มี module ชื่อว่า time ที่ใช้จัดการการกระทำต่างๆที่เกี่ยวกับเวลาในโค๊ดของเรา จะมีฟังก์ชั่นต่างๆที่มีประโยชน์ให้เราได้ใช้ทำงานที่เกี่ยวกับเวลาได้ โดยก่อนที่เราจะใช้ฟังก์ชั่นที่เกี่ยวกับเวลาได้ เราต้องนำเข้า module นี้เข้ามาก่อน
import time
ฟังก์ชั่นที่เป็นที่รู้จักและใช้บ่อยมีดังนี้
time.time()
time() ฟังก์ชั่นจะ return เวลาเป็นวินาทีในรูปของจุดทศนิยมของเวลาที่ผ่านมาทั้งหมดตั้งแต่ epoch (จุดเริ่มต้นของเวลา) จนถึงปัจจุบัน
ฟังก์ชั่น time() ไม่มี parameter
ตัวอย่าง
x = time.time()
print('Seconds since epoch is ', x)
output:
Seconds since epoch is 1605980581.822239
ทุกครั้งที่เรารันโค๊ด วินาทีที่ได้จะเปลี่ยนไปเรื่อยๆ เพราะเวลาไม่หยุดเดินนั่นเอง
time.ctime()
ใช้แปลงวินาทีที่นับจาก epoch มาจนถึงปัจจุบันให้เป็นเวลาท้องถิ่นพื้นที่ที่เราอยู่ขณะนี้ (ประเทศไทยคือ GMT+7)
argument: วินาทีที่ผ่านมาตั้งแต่ epoch (จุดเริ่มต้นของเวลา) หาก parameter นี้ว่างระบบจะใช้ค่าที่ได้จากฟังก์ชั่น time.time() อัตโนมัติ
return: เวลาท้องถิ่นในรูปของ String
ตัวอย่างใส่ตัวแปรที่มีค่าเป็นวินาทีจากฟังก์ชั่น time()
x = time.time()
y = time.ctime(x)
print(y)
output:
Sun Nov 22 01:55:27 2020
ตัวอย่างการเว้น parameter ว่าง
y = time.ctime()
print(y)
output:
Sun Nov 22 01:58:26 2020
time.sleep()
ฟังก์ชั่นนี้จะดีเลย์การ execute ของบรรทัดต่อจากฟังก์ชั่นนี้ตามวินาทีที่ระบุใน argument
argument: วินาที (มีจุดทศนิยมได้)
ตัวอย่าง
print('The next thread will be suspended for 3 seconds')
time.sleep(3)
print('Appeared after 3 seconds')
output:
The next thread will be suspended for 3 seconds
จากนั้นรอ 3 วินาที…
The next thread will be suspended for 3 seconds
Appeared after 3 seconds
time.struct_time
เป็น object ที่มี interface เป็น name tuple หมายความว่า เราสามารถเข้าถึงข้อมูลของแต่ละ element ได้โดยการ index และ attribute ของชื่อ element
Value ต่างๆใน class มีดังนี้
index | attribute | values |
---|---|---|
0 | tm_year | ปีค.ศ. |
1 | tm_mon | range[1,12] |
2 | tm_mday | range[1,31] |
3 | tm_hour | range[0,23] |
4 | tm_min | range[0,59] |
5 | tm_sec | range[0,61]* |
6 | tm_wday | range[0,6]** |
7 | tm_yday | range[1,366] |
8 | tm_isdst | 0,1,-1 *** |
N/A | tm_zone | abbr ของชื่อ timezone |
N/A | tm_gmtoff | offset east ของ UTC เป็นวินาที |
*range เป็น range 0-61 โดยค่าที่ valid ใน timestamps คือ 60 มันเป็นการแสดงค่าแบบ leap seconds (เป็นการเพิ่มหรือลดวินาที 1 วินาที เพื่อให้ได้เวลา UTC ที่ใกล้เคียงโดยเฉลี่ยกับเวลาที่วัดด้วยนาฬิกาอะตอมและเวลาแบบ UT1 ซึ่งมีความคลาดเคลื่อนหรือเปลี่ยนแปลงได้เนื่องจากการหมุนตัวที่ช้าลงของโลก)
**Monday = 0
***หาก dst (daylight saving time) มีผลกระทบต่อเวลาให้เซ็ตค่านี้เป็น 1 หากไม่มีผลกระทบให้เซ็ตค่านี้เป็น 0 กรณีไม่รู้ว่าต้องใส่อะไรให้เซ็ตเป็น -1 ระบบจะใส่อัตโนมัติตามพื้นที่ที่อยู่
ตัวอย่าง
ขั้นแรกต้อง import struct_time
from time import struct_time
จากนั้นสร้าง tuple
time_tuple =(2018, 12, 27, 6, 35, 17, 3, 361, 0)
assign variable ให้ tuple ที่สร้าง
time_tuple =(2018, 12, 27, 6, 35, 17, 3, 361, 0)
time_obj = struct_time(time_tuple)
จากนั้นให้ลองเรียกดูข้อมูลของ time_obj ด้วยคำสั่ง print
time_tuple =(2018, 12, 27, 6, 35, 17, 3, 361, 0)
time_obj = struct_time(time_tuple)
print(time_obj)
output:
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=6, tm_min=35, tm_sec=17, tm_wday=3, tm_yday=361, tm_isdst=0)
วิธีเข้าถึงข้อมูลของสมาชิก
สามารถเข้าถึงข้อมูลของสมาชิกใน object ได้ 2 วิธี คือ การ indexing และ การเรียก attribute
การ indexing
day_of_year = time_obj[7]
print(day_of_year)
output:
361
attribute ที่อยู่ตำแหน่ง index ที่ 7 คือ tm_yday หรือวันของปี
การเรียก attribute
day_of_week = time_obj.tm_wday
print(day_of_week)
output:
3
tm_wday คือวันในสัปดาห์ ค่า 0 คือ วันจันทร์ ทำให้ค่า 3 เป็นวันพฤหัสบดี
การเข้าถึงข้อมูลโดยการเรียก attribute จะเป็นที่นิยมมากกว่า เพราะเรารู้ชื่อ attribute อยู่แล้วว่ามีอะไรบ้าง ทำให้ง่ายต่อการเรียก เพียงแค่พิมพ์ชื่อ attribute ต่อจากจุดหลัง object เท่านั้น
time.localtime()
เป็นการแปลงเวลาที่นับได้ตั้งแต่ epoch เป็นเวลาท้องถิ่นที่เราอยู่ขณะนี้(ประเทศไทยคือ GMT+7)ด้วยฟังก์ชั่น localtime()
argument: วินาทีที่ผ่านมาตั้งแต่ epoch (จุดเริ่มต้นของเวลา) หาก parameter นี้ว่างระบบจะใช้ค่าที่ได้จากฟังก์ชั่น time.time() อัตโนมัติ
return: struct_time ของเวลาท้องถิ่น (local time)
ตัวอย่าง
time_local = time.localtime()
print(time_local)
output:
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=2, tm_hour=0, tm_min=40, tm_sec=5, tm_wday=2, tm_yday=337, tm_isdst=0)
เรียกดูเวลาท้องถิ่นด้วยชื่อ attribute
print('GMT hour: ', time_local.tm_hour)
print('GMT day: ', time_local.tm_wday)
output:
GMT hour: 0
GMT day: 2
time.gmtime()
ใช้แปลงวินาทีที่ผ่านมาตั้งแต่ epoch เป็นเวลาแบบ UTC
argument: วินาทีที่ผ่านมาตั้งแต่ epoch (จุดเริ่มต้นของเวลา) หาก parameter นี้ว่างระบบจะใช้ค่าที่ได้จากฟังก์ชั่น time.time() อัตโนมัติ
return: struct_time ของเวลา UTC
ตัวอย่าง
utc_time = time.gmtime()
print(utc_time)
output:
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=1, tm_hour=17, tm_min=40, tm_sec=5, tm_wday=1, tm_yday=336, tm_isdst=0)
เรียกดูเวลา UTC ด้วยชื่อ attribute
print('UTC hour: ', time_local.tm_hour)
print('UTC day: ', time_local.tm_wday)
output:
UTC hour: 17
UTC day: 1
time.mktime()
เป็นการแปลงเวลาใน struct_time เป็นวินาทีที่ผ่านมาตั้งแต่ epoch บนพื้นฐานของเวลาท้องถิ่นในพื้นที่ที่เราอยู่ขณะนี้
argument: struct_time object (เว้นว่างไม่ได้)
return: วินาทีที่ผ่านมาตั้งแต่ epoch จนถึงเวลาใน struct_time object บนพื้นฐานของเวลาท้องถิ่น
ตัวอย่าง
time_tuple =(2018, 12, 27, 6, 35, 17, 3, 361, 0)
local_inverse = time.mktime(time_tuple)
print('\nconverse time tuple into seconds since epoch of local time: ', local_inverse)
output:
converse time tuple into seconds since epoch of local time: 1545867317.0
สาธิตการแปลงวินาทีที่ได้จากฟังก์ชั่น time.mktime() เป็น เวลา GMT และ UTC ในรูปแบบ tuple ของ struct_time
seconds_test = 1545867317.0
converse_to_gmt = time.localtime(seconds_test)
print(converse_to_gmt)
converse_to_utc = time.gmtime(seconds_test)
print(converse_to_utc)
output:
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=6, tm_min=35, tm_sec=17, tm_wday=3, tm_yday=361, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=26, tm_hour=23, tm_min=35, tm_sec=17, tm_wday=2, tm_yday=360, tm_isdst=0)
จะเห็นได้ว่าผลที่ได้จากการแปลงวินาทีที่ได้จากฟังก์ชั่น time.mktime() ซึ่งได้มาจาก tuple ที่ชื่อว่า time_tuple มี element ทุกตัวตรงกับผลที่ได้จากฟังก์ชั่น time.localtime() หมายความว่าฟังก์ชั่น time.mktime() และ time.localtime() มีความเกี่ยวข้องกัน
time.asctime()
แปลงเวลาใน struct_time เป็นเวลาในรูปแบบ String
argument: struct_time object หาก parameter นี้ว่าง จะใช้เวลาท้องถิ่นในพื้นที่ที่เราอยู่ในขณะนี้ จะได้ output เดียวกับฟังก์ชั่น time.ctime()
return: เวลาท้องถิ่นในรูปของ String
ตัวอย่าง
time_string = time.asctime()
print(time_string)
output:
Wed Dec 2 01:36:30 2020
time.strftime()
แปลงเวลาใน struct_time ให้อยู่ในรูปของ String ตาม format ตามต้องการ
argument: format ที่ต้องการ และ struct_time object หาก parameter นี้ว่าง จะใช้เวลาท้องถิ่นในพื้นที่ที่เราอยู่ในขณะนี้
return: เวลาในรูปของ String ตาม format ที่ต้องการ
ดู format ของ String ได้ที่นี่
ตัวอย่าง
time_format = time.strftime('%d-%m-%y %H:%M:%S', time.localtime())
print(time_format)
output:
02-12-20 01:53:28
time.strptime()
แปลงข้อความ String ให้อยู่ในรูป tuple ของ struct_time
argument: String และ format ของ String
return: struct_time
ตัวอย่าง
str_to_struct = time.strptime('25 January 1994', '%d %B %Y')
print(str_to_struct)
output:
time.struct_time(tm_year=1994, tm_mon=1, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=25, tm_isdst=-1)