Hướng dẫn sử dụng Date Time trong Python

Học Lập Trình Với Python

nhan

Đăng

-

Bạn có thể tìm kiếm qua : Google | Cốc Cốc | Bing với chủ đề này của Ad's Consulting Live

Danh sách 20 bài học về lập trình Python cơ bản

  1. Giới thiệu về Python
  2. Hướng dẫn cài đặt và cấu hình Python
  3. Hướng dẫn cài đặt và cấu hình Python trên Ubuntu Desktop
  4. Hướng dẫn cài đặt Visual Studio Code
  5. Hướng dẫn cài đặt PyDev cho Eclipse lập trình Python
  6. Quy ước và các phiên bản ngữ pháp trong Python
  7. Hướng dẫn lập trình Python cho người mới bắt đầu
  8. Tra cứu tài liệu Python
  9. Các lệnh rẽ nhánh trong Python
  10. Vòng lặp trong Python
  11. Hướng dẫn sử dụng Python Function
  12. Class và đối tượng trong Python
  13. Thừa kế và đa hình trong Python
  14. Hướng dẫn xử lý ngoại lệ trong Python
  15. Hướng dẫn sử dụng String trong Python
  16. Hướng dẫn sử dụng Python Lists
  17. Hướng dẫn sử dụng Python Tuples
  18. Hướng dẫn sử dụng Python Dictionary
  19. Hướng dẫn sử dụng Date Time trong Python
  20. Kết nối MySQL Database trong Python sử dụng PyMySQL

Lập trình Python nâng cao

Date time trong Python

Python cung cấp cho bạn 4 module có liên quan tới ngày tháng và thời gian.

  1. time : là một module chỉ bao gồm các hàm, và các hằng số liên quan tới ngày tháng và thời gian, không có lớp (class) nào được định nghĩa trong module này.
  2. datetime : Module này định nghĩa một số lớp đại diện cho ngày tháng và thời gian.
  3. calendar : Module này chứa các hàm liên quan đến lịch. Nó cũng định nghĩa ra các lớp đại diện cho Lịch, và exception có liên quan.
  4. locale : Module này chứa các hàm sử dụng để định dạng (format), hoặc phân tích (parse) ngày tháng và thời gian dựa trên locale (vùng miền, địa lý).

Datetime Module

Datetime là một module, được thiết kế dựa trên hướng đối tượng ( object oriented )để làm việc với ngày tháng và thời gian trong Python. Nó có vài lớp đại diện cho ngày tháng và thời gian

Một số class của datetime

  • datetime.date
    Một đối tượng date đại diện cho ngày tháng (date), không bao gồm thời gian, theo bộ lịch Gregorian (Dương lịch).
  • datetime.datetime
    Một đối tượng datetime đại diện cho ngày tháng (date) và thời gian, theo bộ lịch Gregorian.
  • datetime.time
    Một đối tượng time đại diện cho thời gian (time), không bao gồm ngày tháng (date).
  • datetime.tzinfo
    Là một lớp cơ sở trừu tượng (base abstract class) cho các đối tượng thông tin múi giờ (timezone).
  • datetime.timezone
    Là một lớp con trực tiếp của lớp tzinfo, theo chuẩn UTC (Coordinated Universal Time) (Giờ hợp nhất quốc tế).
  • datetime.timedelta
    Đối tượng timedelta mô tả một khoảng thời gian (duration), là khoảng thời gian giữa 2 thời điểm.

Calendar module

calendar là một module cung cấp các hàm, và một vài lớp liên quan tới Lịch, nó hỗ trợ tạo (generate) ra hình ảnh của bộ lịch dưới dạng text, html, ….

Khái niệm về Ticks ( số giây)

Trong khoa học máy tính, 12h sáng ngày 1 tháng 1 năm 1970 là một thời điểm đặc biệt, nó được sử dụng để bắt đầu đếm thời gian. Thời điểm đặc biệt này được gọi là epoch (Tạm hiểu là kỷ nguyên máy tính). 

Trong Python, khoảng thời gian giữa thời điểm hiện tại và thời điểm đặc biệt nói trên được tính bằng số giây (seconds). Khoảng thời gian đó được gọi là Ticks.

Hàm time() trong module time trả về số giây (seconds) tính từ thời điểm 12h sáng ngày 1 tháng 1 năm 1970 tới hiện tại. Nó trả về một kiểu số chấm động (floating point).

# Nhập khẩu module time.
import time;
# Số giây tính từ 12h sáng ngày 1-1-1970 tới hiện tại.
ticks = time.time()
print ("Number of ticks since 12:00am, January 1, 1970: ", ticks)

Time Module

time là một module chỉ bao gồm các hàm, và các hằng số liên quan tới ngày tháng và thời gian, có một vài lớp (class) viết trên C/C++ được định nghĩa trên module này. Chẳng hạn lớp struct_time.Trên module time, thời gian được đại diện bởi Ticks hoặc struct_time. Nó có các hàm để định dạng (format) Ticks hoặc struct_time thành string, và ngược lại phân tích (parse) một string thành Ticks hoặc struct_time.

Chỉ sốThuộc tínhCác giá trị
0tm_year (Ví dụ, 1993)
1tm_mon Phạm vi [1, 12]
2tm_mday Phạm vi [1, 31]
3tm_hour Phạm vi [0, 23]
4tm_min Phạm vi [0, 59]
5tm_sec Phạm vi [0, 61]; Xem thêm mô tả phía dướ
6tm_wday Phạm vi [0, 6], Thứ hai là 0
7tm_yday Phạm vi [1, 366]
8tm_isdst 0, 1 hoặc -1;
N/Atm_zone Viết tắt của tên múi giờ
N/Atm_gmtoff offset east of UTC in seconds

tm_sec
Phạm vi giây (second) thực sự là 0 đến 61; điều này được giải thích là giây nhuận (double leap seconds). Mặc dù rất rất hiếm.

Các hàm của time gọi đến các hàm được viết trên ngôn ngữ C. Dưới đây là danh sách các hàm thông dụng, chi tiết hơn bạn có thể tham khảo tài liệu trên website chính thức của Python.

Ticks ==> struct_time

  • time.gmtime([secs])
    Chuyển đổi thời gian tính theo giây từ thời điểm spoch thành một struct_time trong UTC, trong đó cờ dst là 0. Nếu tham số secs không được cung cấp hoặc None, nó sẽ có giá trị mặc định trả về bởi hàm time().
  • time.localtime([secs])
    Giống với hàm gmtime() nhưng chuyển đổi thành thời gian địa phương (local time). Và cờ dst có giá trị  là 1.

” Hàm gmtime([secs]) và localtime([secs]) đều trả về kiểu struct_time. “

import time
# 1 giây sau kỷ nguyên máy tính (epoch).
# Hàm này trả về một kiểu struct: struct_time
ts = time.gmtime(1)
print ("1 seconds after epoch: ")
print (ts)
print ("\n")
# Thời điểm hiện tại, giống với time.gmtime( time.time() )
# Hàm này trả về một kiểu struct: struct_time
ts = time.gmtime()
print ("struct_time for current time: ")
print (ts)

struct_time ==> Ticks

Bạn có thể chuyển đổi một struct_time hoặc một Tuple đại diện cho thời gian thànhTicks (Số giây tính từ thời điểm epoch).

import time
a_struct_time = time.localtime()
print ("Current time as struct_time: ");
print (a_struct_time)
# Chuyển đổi struct_time hoặc Tuple thành Ticks.
ticks = time.mktime(a_struct_time)
print ("Ticks: ", ticks)
# Một Tuple có 9 phần tử.
aTupleTime = ( 2017, 4, 15, 13, 5, 34, 0, 0, 0)
print ("\n")
print ("A Tuple represents time: ")
print (aTupleTime)
# Chuyển đổi struct_time hoặc Tuple thành Ticks.
ticks = time.mktime(aTupleTime)
print ("Ticks: ", ticks)

struct_time, Ticks ==> string

  • time.asctime([struct_t])
    Chuyển đổi một tuple hoặc struct_time đại diện cho một thời gian như được trả về bởi gmtime() hoặc localtime()thành một string như mẫu sau: ‘Sun Jun 20 23:21:05 1993’. Nếu tham số struct_t không được cung cấp, thời điểm hiện tại được trả về bởi localtime() sẽ được sử dụng. Thông tin địa phương (locale) không được sử dụng bởi asctime().
  • time.ctime([secs])
    Chuyển đổi thời gian theo số giây (seconds) từ thời điểm epoch thành một string đại diện cho thời gian máy tính (local time). Nếu tham số secs không được cung cấp hoặc None, thời gian hiện tại được trả về bởi time() sẽ được sử dụng. ctime(secs) tương đương với asctime(localtime(secs)). Thông tin địa phương (locale) không được sử dụng bởi ctime().

Ví dụ đi kèm:

import time
# Một Tuple với 9 phần tử.
# (Year, month, day, hour, minute, second, wday, yday, isdst)
a_tuple_time = (2017, 4, 15 , 22 , 1, 29, 0, 0, 0)
a_timeAsString = time.asctime(a_tuple_time)
print ("time.asctime(a_tuple_time): ", a_timeAsString)
a_struct_time = time.localtime()
print ("a_struct_time: ", a_struct_time)
a_timeAsString = time.asctime(a_struct_time)
print ("time.asctime(a_struct_time): ", a_timeAsString)
# Số giây tính từ 12h sáng ngày 1-1-1970 tới hiện tại.
ticks = time.time()
a_timeAsString = time.ctime(ticks)
print ("time.ctime(ticks): ", a_timeAsString)

Phân tích và định dạng

Module time cung cấp một số hàm sử dụng để phân tích (parse) một string thành thời gian. Và ngược lại, định dạng (format) thời gian thành một string.

  • time.strptime(string[, format] )
    Phân tích một string đại diện một thời gian theo một định dạng. Trả về một struct_time giống như được trả về bởi hàm gmtime() hoặc localtime().
  • time.strftime(format [, t] )
    Chuyển đổi một Tuple hoặc struct_time đại diện thời gian giống như được trả về bởi hàm gmtime() hoặc localtime() thành một string xác định bởi tham số format. Nếu nó không được cung cấp, thời gian hiện tại được trả về bởi localtime() sẽ được sử dụng. Tham số format phải là một string. ValueError có thể được ném ra (throw) nếu một trường (field) nào đó trong tham số ‘t’ nằm ngoài phạm vi cho phép.

Ví dụ phân tích (parse) một string thành thời gian có kiểu struct_time.

import time
# Một string đại diện thời gian.
aStringTime = "22-12-2007 23:30:59"
a_struct_time = time.strptime(aStringTime, "%d-%m-%Y %H:%M:%S")
print ("a_struct_time:")
print (a_struct_time)

Xem thêm về module time tại đây : https://docs.python.org/3/library/time.html

datetime module

datetime là một module, được thiết kế theo hướng đối tượng để làm việc với ngày tháng và thời gian trong Python. Nó định nghĩa một vài lớp đại diện cho ngày tháng và thời gian.

  • datetime.date
    Một đối tượng date đại diện cho một ngày tháng (date), không bao gồm thời gian, theo bộ lịch Gregorian.
  • datetime.datetime
    Một đối tượng datetime đại diện cho một ngày tháng (date) và thời gian, theo bộ lịch Gregorian.
  • datetime.time
    Một đối tượng time đại diện cho thời gian (time), không bao gồm ngày tháng (date).
  • datetime.tzinfo
    Là một lớp cơ sở trừu tượng (base abstract class) cho các đối tượng thông tin múi giờ.
  • datetime.timezone
    Là một lớp con trực tiếp của lớp tzinfo, theo chuẩn UTC (Coordinated Universal Time) (Giờ hợp nhất quốc tế).
  • datetime.timedelta
    timedelta object represents a duration, the difference between two dates or times.

datetime.timedelta

timedelta là một lớp nằm trong module datetime, nó mô tả một khoảng thời gian. Là sự khác biệt giữa 2 thời gian. Lớp timedelta có 7 thuộc tính (attribute), đều có giá trị mặc định là 0.

Thuộc tínhMô tảPhạm vi
days -999999999 : 999999999
seconds 0 : 86399
microseconds 1 seconds = 1000,000 microseconds  : 999999
milliseconds 1 seconds = 1000 milliseconds
minutes
hours
weeks

Các toán tử hỗ trợ.

Toán tửVí dụ
t1 = t2 + t3 t2 = (hours = 10, seconds= 2)
t3 = (hours = 1, minutes = 3)
–> t1 = (hours= 11, minutes = 3, seconds = 2)
t1 = t2 – t3 t2 = (hours = 10, seconds= 2)
t3 = (hours = 1, minutes = 3)
–> t1 = (hours= 8, minutes = 57, seconds = 2)
t1 = t2 * i
t1 = i * t2
t2 = (hours = 10, seconds= 2)
i = 3
–> t1 = (days =1, hours = 6, seconds= 6)
t1 = t2 t2 = (hours = 25, seconds= 2)
–> t1 = (days: 1, hours: 1, seconds: 2)
+t1 return t1
-t1 t1 = (hours = 10, seconds= 2)
–> -t1 = (days = -1, hours = 13, minutes = 59, seconds= 58)
abs(t)
Giá trị tuyệt đối, tương đương với +t khi t.days >= 0, và là –t khi  t.days < 0.

t = (hours= -25, minutes = 3)
–> t = (days =  -2, hours = 23, minutes = 3)
–> abs(t) = (days =  1, hours = 0, minutes = 57)
str(t) Trả về string theo mẫu [D day[s], ][H]H:MM:SS[.UUUUUU], D có thể nhận giá trị âm.
repr(t) Trả về string theo mẫu datetime.timedelta(D[, S[, U]]), D có thể nhận giá trị âm

datetime.date

datetime.date là một lớp, đối tượng của nó đại diện cho ngày tháng (date), không bao gồm thông tin thời gian

Phương thức khởi tạo (Constructor)

# MINYEAR <= year <= MAXYEAR
# 1 <= month <= 12
# 1 <= day <= số ngày cho bởi year và month.
date (year, month, day)

Constructor của lớp date có thể phát ra lỗi ValueError nếu các giá trị truyền vào không hợp lệ (nằm ngoài phạm vi cho phép).

Các hằng số:

  • date.min
    Biểu thị ngày đầu tiên trong phạm vi của lớp date, date(MINYEAR, 1, 1).
  • date.max
    Biểu thị ngày cuối cùng trong phạm vi của lớp date, date(MAXYEAR, 12, 31).
  • date.resolution
    Sự khác biệt nhỏ nhất giữa các đối tượng date không bằng nhau, timedelta(days=1).

Các toán tử

  • date2 = date1 + timedelta
    Cộng thêm một khoảng thời gian, timedelta
  • date2 = date1 – timedelta
    Trừ một khoảng thời gian, timedelta
  • timedelta = date1 – date2
    Trừ hai đối tượng date.
  • date1 < date2
    So sánh hai đối tượng date.

Các phương thức:

Phương thứcMô tả
date.replace(year=self.year, month=self.month, day=self.day) Trả về một đối tượng date với cùng giá trị, ngoại trừ các giá trị bị thay thế cho bởi tham số.

Ví dụ:
d == date(2002, 12, 31),  d.replace(day=26) == date(2002, 12, 26).
date.timetuple() Trả về một time.struct_time như được trả về bởi time.localtime(). Trong đó giờ, phút và giây bằng 0, và cờ DST là -1.

d.timetuple() tương đương với time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1)), trong đó yday = d.toordinal() – date(d.year, 1, 1).toordinal() + 1là số thứ tự ngày trong năm, ngày 1-1 được gọi là ngày thứ 1.
date.toordinal() Trả về số thứ tự của ngày theo lịch Gregorian, theo đó ngày 1 tháng 1 của năm 1 có thứ tự là 1.

Đối với một đối tượng date bất kỳ d, date.fromordinal(d.toordinal()) == d.
date.weekday() Trả về ngày trong tuần có kiểu integer, với thứ hai là 0, thứ ba là 1, .. và chủ nhật là 6.

Ví dụ, date(2002, 12, 4).weekday() == 2, thứ tư. Xem thêm isoweekday().
date.isoweekday() Trả về ngày trong tuần là số có kiểu integer (Theo tiêu chuẩn ISO), với thứ hai là 1, thứ ba là 2 và chủ nhật là 7.

Ví dụ, date(2002, 12, 4).isoweekday() == 3, Thứ tư. Xem thêm weekday()isocalendar().
date.isocalendar() Trả về một Tuple có 3 phần tử, (ISO year, ISO week number, ISO weekday).
date.isoformat() Trả về một String đại diện ngày tháng theo định dạng ISO 8601, ‘YYYY-MM-DD’.

Ví dụ, date(2002, 12, 4).isoformat() == ‘2002-12-04’.
date.__str__() Đối với đối tượng date d, str(d) tương đương với d.isoformat().
date.ctime() Trả về String đại diện date, ví dụ date(2002, 12, 4).ctime() == ‘Wed Dec 4 00:00:00 2002’.

d.ctime() tương đương với time.ctime(time.mktime(d.timetuple())). Hàm ctime()được gọi phù hợp với tiêu chuẩn C khi chạy trên các nền tảng (flatform).
date.strftime(format) Trả về string đại diện date, theo định dạng (format) cho bởi tham số. Các mã định dạng cho giờ phút giây có giá tri 0.

Xem thêm hàm strftime() và strptime() của module time
date.__format__(format) Tương tự với date.strftime()

Chú ý tất cả các bài mà mình đã giới thiệu các bạn đọc và thực hành luôn nhé.

Quảng Cáo

CÁC CHỦ ĐỀ HAY

Quảng Cáo

Trending

0
Would love your thoughts, please comment.x
()
x