Giới thiệu module datetime, class datetime.date và class.time

Tuan Tran

Khi bạn đọc đến đây, tôi chắc chắn bạn có hứng thú với việc mô tả và xử lý thời gian trong Python 3 rồi đấy (hoặc nếu bạn muốn tìm hiểu khái niệm thời gian ở thế giới thực có thể xem ở link số [1] ở phần tài liệu tham khảo nhé). Hy vọng bạn sẽ có những kiến thức bổ ích và tôi chắc chắn bạn sẽ không phải thất vọng đâu.

Tôi, Tuấn Bond (aka Tuan Tran), xin trân trọng giới thiệu cho các bạn cách chúng ta làm những việc trên như thế nào trong Python 3 một cách ngắn gọn nhất có thể. À mà, series này dài kỳ, các bạn nhớ theo hết quãng đường cùng tôi nhé ;)

Lưu ý: Anh chị nào có trình độ cao siêu, vui lòng đừng cười những gì tôi chia sẻ. Bài viết này chỉ dành cho những bạn mới tìm hiểu Python thôi :D

Module datetime là gì nhỉ?

Thật may mắn là ở thời điểm hiện tại các ngôn ngữ đã có những thư viện hỗ trợ thứ mà chúng ta cần: khởi tạo và xử lý thời gian. Vì vậy, trong Python 3 chúng ta có một module gọi là datetime. Ha ha, ngạc nhiên chưa? Như tôi đã nói là các bạn (và cả tôi nữa) thật may mắn mà. Module ấy nó giúp chúng ta xử lý hầu hết tất cả các việc về thời gian trong Python ý. Hãy nhìn hình sau đây nhé, nó sẽ cho bạn biết cái module kia có những lớp (class) phổ thông nào đấy.


Nhìn vào hình trên chúng ta thấy ngay 4 lớp (class) phổ thông (mà chúng ta thường gặp trong lúc sử dụng) mà module datetime cung cấp:

  1. date

  2. time

  3. datetime

  4. timedelta

 À mà, để sử dụng được cái module datetime và class date và các class khác của nó, các bạn nên “import” nó trước khi sử dụng nhé

>>> from datetime import date, time, datetime, timedelta

Class đầu tiên nào!

Chúng ta cùng đi đến đối tượng đầu tiên nhé. Vậy class date giúp chúng ta được gì nhờ? Dĩ nhiên là nó sẽ làm những việc gì đó mà liên quan đến ngày, tháng và năm rồi, bạn nào giỏi tiếng Anh sẽ biết ngay mà chẳng cần tôi giải thích. Cái tên quá rõ ràng rồi còn gì :D

Nhờ có class date, các bạn có thể khởi tạo đối tượng date như hình sau. Các tham số để khởi tạo đối tượng date lần lượt là năm, tháng và ngày nhé. Đừng quên đấy!

>>> from datetime import date
>>> date_01 = date(2019, 12, 23)
>>> date_01
2019-12-23

Và dĩ nhiên, vì cái module này nó rất là “hịn” và “xịn sò” nên chúng ta có thể lấy được đối tượng ngày hiện tại luôn ấy ;)

>>> from datetime import date
>>> date_02 = date.today()
>>> date_02
2019-02-09

Vậy sau khi đã tạo xong đối tượng date, các bạn sẽ làm gì tiếp nữa? Xử lý chúng thôi nào :D Bạn có thể lấy ra riêng lẻ ngày, tháng hoặc năm đấy.

>>> from datetime import date
>>> date_03 = date.today()
>>> date_03.year
2019
>>> date_03.month
9
>>> date_03.day
2

Hoặc bạn có thể thay thế ngày hoặc tháng hoặc năm của một đối tượng date đấy. Như bạn đã thấy ở dưới, date_05 đã được thay thế ngày “2” bằng ngày “28” rồi.

>>> from datetime import date
>>> date_04 = date.today()
>>> date_042019-02-09
>>>
>>> date_05 = date_04.replace(day=28)
>>> date_05
2019-02-28

Hoặc giả sử, sếp của bạn yêu cầu bạn, cho biết một ngày nào đó là thứ mấy trong tuần thì sao ta? Có thể lắm chứ

>>> from datetime import date
>>> date_06 = date.today()
>>> date_06
2019-02-09
>>>>>>date_06.weekday()
0
>>> date_06.isoweekday()
1
>>> date_06.isocalendar()
(2019, 36, 1)

Như bạn đã thấy ở hinh trên, tôi sử dụng 3 phương thức (method)

  • weekday()

    • Trả về giá trị là một số nguyên cho biết ngày đó là thứ mấy trong tuần

    • Thứ 2 là số 0 và chủ nhật là số 6

  • isoweekday()

    • Trả về giá trị là một số nguyên cho biết ngày đó là thứ mấy trong tuần, nhưng theo chuẩn ISO (dành cho bạn nào chưa biết ISO là gì thì vào đọc ở link [2] phần tài liệu tham khảo nhé)

    • Thứ 2 là số 1 và chủ nhật là số 7

  • isocalendar()

    • Trả về giá trị là một tuple cho biết ngày đó là thứ mấy trong tuần, tuần thứ mấy trong năm và năm, tất cả theo chuẩn ISO hết nhé

Bạn thấy đấy, trên đây chỉ là những bước sơ khởi cho hành trình gian nan tiếp thôi :D Nếu bạn muốn đào sâu hơn thì vào link [3] ở phần tài liệu tham khảo nhé.

Class time sẽ như thế nào nhỉ?

Nếu như class date dùng để mô tả ngày tháng, vậy class time sẽ dùng để mô tả giờ, phút và giây. Quá dễ phải không nào?

Bạn biết đấy, cũng như class date, để khởi tạo một đối tượng time bạn cũng cần phải truyền vào giá trị giờ, phút và giây (và cả micro giây nữa, nhưng tôi chắc bạn cũng kg cần phải sử dụng đến micro giây đâu :D )

>>> from datetime import time
>>> time_01 = time()
>>> time_01
datetime.time(0, 0)
>>>
>>> time_02 = time(15, 24, 59)
>>> time_02
datetime.time(15, 24, 59)
>>>
>>> time_03 = time(hour=17, minute=5, second=40)
>>> time_03
datetime.time(17, 5, 40)
>>>
>>> time_04 = time(8, 45, 56, 234566)
>>> time_04
datetime.time(8, 45, 56, 234566)
>>>
>>> time_04 = time(25, 59, 59)
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
ValueError: hour must be in 0..23

Bạn hãy nhớ nhập đúng giá trị của thời gian nhé, không thôi sẽ xảy ra lỗi như tôi khi khai báo đối tượng time_05 đấy.

Cũng như class date, bạn cũng có thể lấy ra từng giá trị riêng lẻ cho giờ, phút và giây như sau.

>>> from datetime import time
>>> time_06 = time(11, 23, 45)
>>> time_06.hour
11
>>> time_06.minute
23
>>> time_06.second
45

À, nó cũng có hàm replace() để bạn có thể thay thế thời gian cho một đối tượng time nữa đó

>>> from datetime import time
>>> time_07 = time(11, 23, 45)
>>> time_07
datetime.time(11, 23, 45)
>>> time_07.replace(7, 8, 9)
datetime.time(7, 8, 9)

Vậy thôi, chỉ nhiêu đó thôi, còn nếu bạn muốn tìm hiểu hơn nữa, vui lòng vào link [4] ở tài liệu tham khảo nhé.

Tổng kết

Ha ha, cuối cùng cũng đến phần kết thúc, nhưng bạn ơi, đừng quên thực hành, tìm hiểu và đón xem tiếp phần sau nhé. Lần sau chúng ta sẽ “xử lý” tiếp 2 classes còn lại của module datetime các bạn nha.

p/s: tôi đảm bảo bạn sẽ phải ngạc nhiên và hết hồn đấy (ờ thì, có lẽ bạn sẽ hết hồn vì nó quá dễ đấy :D ) À nếu như, các bạn có ý kiến, ý tưởng hay bất cứ gì thì có thể qua phần Forum để thảo luận nhé ;)

Tài liệu tham khảo

[1] - https://vi.wikipedia.org/wiki/Th%E1%BB%9Di_gian

[2] - https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm

[3] - https://docs.python.org/3/library/datetime.html#datetime.date

[4] - https://docs.python.org/3/library/datetime.html#datetime.time