Sử dụng module Datetime trong python | Laptrinhcanban.com

Sử dụng module Datetime trong python

Hướng dẫn sử dụng module Date Time trong Python. Bạn sẽ biết module datime trong Python là gì, khái niệm và cách sử dụng các class có trong module datetime như class datetime, class date, class time, class timezone sau bài học này.

Datetime trong Python là gì

Datetime trong Python là một module chuyên dùng để thực hiện các thao tác với thời gian. Trong module Datetime chứa nhiều class phục vụ các thao tác với các đối tượng khác nhau của thời gian, ví dụ như:

  • class datetime dùng để thao tác với ngày và giờ.
  • class date dùng để thao tác với ngày
  • class time dùng để thao tác với giờ
  • class timezone dùng để thao tác với múi giờ

Chúng ta sử dụng constructor trong các class ở trên để tạo ra instance - các đối tượng cụ thể được tạo ra từ bản thiết kế class , chứa thông tin về thời gian.

Trong python nói riêng và các ngôn ngữ lập trình hướng đối tượng nói chúng, nếu class được coi là một bản thiết kế ngôi nhà, thì tất cả những ngôi nhà được xây dựng dựa trên bản thiết kế đó là những object của class, và một ngôi nhà cụ thể được gọi là một instance. Toàn bộ quy trình xây nhà như đổ nền, xây tường v.vv được gọi là constructor.

Với các class trong module datetime, sau khi tạo ra instance bằng constructor, chúng ta tiến hành tính toán thời gian bằng các phương thức và thuộc tính tích hợp trong class trực tiếp với các instance này.

Class Datetime trong Python

Class Datetime được dùng để thao tác với cả ngày và giờ trong python. Constructor tổng quát của class này như dưới đây. Chú ý là mặc dù có nhiều tham số trong công thức tổng quát, nhưng chúng ta có thể lược bỏ phần lớn chúng khi sử dụng.

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

Trong đó:

  • year : năm (1 <= year <= 9999)
  • month : tháng (1 <= month <= 12)
  • day : ngày (1 <= day <= số ngày trong tháng
  • hour : giờ (0 <= hour < 24)
  • minute : phút (0 <= minute < 60)
  • second : giây (0 <= second < 60)
  • microsecond : micro giây (0 <= microsecond < 1000000)
  • tzinfo : subclass dùng để chỉ định múi giờ, tạo ra bởi class timezone.
  • fold : fold = 1 khi tính thời gian hè, fold = 0 khi không tính.

Lưu ý là về mặc định, các instance được tạo ra không chứa thông tin về múi giờ. Chỉ khi chúng ta chỉ định giá trị của tzinfo trong constructor, thông tin về múi giờ mới được thêm vào instance.

Nếu instance không mang giá trị của múi giờ thì được gọi là một naive object, và ngược lại nếu instance đó mang thông tin múi giờ thì được gọi là một aware object.

Cách sử dụng class datetime giống như ví dụ sau đây:

import datetime

#Tạo ra một instance chứa ngày tháng năm
dt1 = datetime.datetime(2020, 7, 21)
print(dt1)
#>> 2020-07-21 00:00:00

#Tạo ra một instance chứa year, month, day, hour, minute, second, microsecond
dt2 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551)
print(dt2)
#>> 2020-07-21 06:12:30.000551


#Tạo một subclass chỉ định múi giờ
hanoi_tz = datetime.timezone(datetime.timedelta(hours=7))

#Sủ dụng subclass trên để tạo ra một instance chứa múi giờ.
dt3 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551, hanoi_tz)
print(dt3)
#>> 2020-07-21 06:12:30.000551+09:00

Vậy trong ba instance dt1, dt2 và dt3 ở trên, bạn có biết đâu là naive object và đâu là aware object không?

Timezone trong Python

Class timezone trong python là một subclass của class tzinfo được dùng để chỉ định múi giờ khi tạo ra một instance bằng class datetime, như ở phần trên. Timezone trong python được chỉ định tuân theo UTC (Giờ Phối hợp Quốc tế), và có constructor như sau:

class datetime.timezone(offset, name=None)

Trong đó đối số offset là một đối tượng biểu thị múi giờ, là một instance được tạo ra từ class timedelta.

Class timedelta trong python là một class để biểu diễn sự chênh lệch thời gian giữa các múi giờ. Class timedelta có constructor như sau:

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

Trong đó các đối số mang ý nghĩa days(ngày), seconds(giây), microseconds(micro giây), minutes(phút), hours(giờ), weeks(tuần).

Để chỉ định múi giờ khi sử dụng timedelta, chúng ta chỉ định giá trị của hours bằng với giá trị của múi giờ. Ví dụ tại Việt Nam sẽ là hours=7, tại Nhật thì hours=9, tại NewYork thì hours=-5 chẳng hạn.
Chúng ta sẽ chỉ định múi giờ giống như ví dụ sau đây:

import datetime

hanoi_tz = datetime.timezone(datetime.timedelta(hours=7))
print(hanoi_tz)
#>> UTC+07:00

tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
print(tokyo_tz)
#>> UTC+09:00

ny_tz = datetime.timezone(datetime.timedelta(hours=-4))
print(ny_tz)
#>> UTC-04:00

Lại nữa, trong trường hợp chỉ định múi giờ UTC bằng 0 (giờ tại kinh tuyến số 0, đi qua Đài thiên văn Hoàng gia Greenwich, Greenwich, Luân Đôn, Anh), chúng ta có thể chỉ định hours=0 hoặc là sử dụng thuộc tính timezone.utc như ví dụ dưới đây:

import datetime

utc_tz1 = datetime.timezone(datetime.timedelta(0))
print(utc_tz1)
#>> UTC

ny_tz2 = datetime.timezone.utc
print(utc_tz1)
#>> UTC

Date trong Python

Class date trong python là class dùng để thao tác với ngày, với constructor như sau:

class datetime.date(year, month, day)

Trong đó:

  • year : năm ( 1 <= year <= 9999)
  • month: tháng ( 1<= month<= 12)
  • day : ngày (1<= day <=số ngày có trong tháng đó)

Cách sử dụng date trong python cụ thể như ví dụ sau:

import datetime

d = datetime.date(2020, 7, 21)
print(d)
#>> 2020-07-21

print(type(d))
#>># <class 'datetime.date'>

d_today = datetime.date.today()
print(d_today)
#>> 2021-05-06

Class date do không chứa thông tin của múi giờ, nên instance được tạo ra từ class nay luôn là naive object.

Time trong Python

Class date trong python là class dùng để thao tác với giờ, với constructor như sau:

class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

Trong đó:

  • hour : giờ (0 <= hour < 24)
  • minute : phút (0 <= minute < 60)
  • second : giây (0 <= second < 60)
  • microsecond : micro giây (0 <= microsecond < 1000000)
  • tzinfo : subclass dùng để chỉ định múi giờ, tạo ra bởi class timezone.
  • fold : fold = 1 khi tính thời gian hè, fold = 0 khi không tính.

Chúng ta có thể chỉ định hoặc lược bỏ đối số tzinfo (múi giờ), và instance được tạo ra thuộc dạng naive object hay aware object cũng tùy thuộc vào chỉ định này.

Ví dụ cụ thể về cách sử dụng class time trong python như sau:

import datetime

t1 = datetime.time(6, 12, 30, 551)
print(t1)
#>> 06:12:30.000551

hanoi_tz = datetime.timezone(datetime.timedelta(hours=7))
t2 = datetime.time(6, 12, 30, 551, hanoi_tz)
print(t2)
#>> 06:12:30.000551+07:00

Tổng kết và thực hành

Trên đây Kiyoshi đã hướng dẫn bạn về cách sử dụng module datetime trong python cũng như khái niệm và cách sử dụng các class chứa trong module này rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.