Kiểu ngày trong Python

Trong Python, kiểu dữ liệu ngày tháng năm (date) được xử lý chủ yếu bằng thư viện datetime. Thư viện này cung cấp các lớp giúp bạn làm việc với ngày tháng và giờ.

  1. Kiểu ngày trong Python là gì ?
  2. Tại sao sử dụng kiểu DateTime trong Python
  3. Một số định nghĩa cần nắm với DateTime python
  4. Các lớp trong datetime trong Python
  5. Một số vụ ngày hay sử dụng trong Python

1. Kiểu ngày trong Python là gì ?

Là kiểu dữ liệu chứa nhiều thành phần, gồm ngày, tháng,năm, giờ, phút, giây

Kiểu ngày trong Python

2. Tại sao sử dụng kiểu DateTime trong Python

Nếu tạo biến để lưu ngày tháng năm, một lập trình viên đã code

ngay=20
thang=10
nam=2025

Theo bạn ổn hay không ? vì sao ?

Trả lời: không ổn, vì trong python đã hỗ trợ kiểu ngày, chuyên dùng để tính toán khoảng cách ngày, thống kê, tìm kiếm, nên làm như cách trên là một cách rời rạc.

Code lại theo kiểu DateTime

import datetime
d = datetime.date(2025, 2, 18)
print(d)
print(d.year, d.month, d.day)

3. Một số định nghĩa cần nắm với DateTime python

import datetime
d = datetime.date(2025, 2, 18)
print(d)
print(d.year, d.month, d.day)

Với code trên, nhìn và hiểu từng dòng code

import datetime : Nạp mô-đun datetime → dùng để làm việc với ngày và giờ
datetime.date(...):  Gọi lớp date trong datetime để tạo một ngày cụ thể
date(2025, 2, 18)  :  Tham số truyền vào: năm = 2025, tháng = 2, ngày = 18
d.year :Lấy phần năm trong biến d
d.month : Lấy phần tháng
d.day : Lấy phần ngày

4. Các lớp trong datetime trong Python

    date: Đại diện cho ngày (ngày, tháng, năm).
    time: Đại diện cho thời gian (giờ, phút, giây, micro giây).
    datetime: Kết hợp cả ngày và thời gian (ngày, tháng, năm, giờ, phút, giây, micro giây).
    timedelta: Đại diện cho sự khác biệt giữa hai ngày/giờ.

Xem sơ đồ

Sơ đồ như sau module datetime

Module datetime
      - Class: date
            + Hàm 1, Hàm 2 .... n
      - Class: time
            + Hàm 1, Hàm 2 .... n
      - Class: datetime
            + Hàm 1, Hàm 2 .... n
      - Class: timedelta
            + Hàm 1, Hàm 2 .... n

    Các hàm là chức năng ta cần dùng, ví dụ như lấy ngày hiện tại từ máy tính...

from datetime import date
today = date.today()
print("Hôm nay là ", today)

today() là hàm nằm trong class date thuộc module datetime

Lớp date

Dùng để làm việc với ngày (năm, tháng, ngày)

import datetime
d = datetime.date(2025, 2, 18)
print(d)
print(d.year, d.month, d.day)

Lớp time

Dùng để làm việc với giờ (giờ, phút, giây, mili-giây)

import datetime
t = datetime.time(14, 30, 15)
print(t)
print(t.hour, t.minute, t.second)

Lớp datetime

Kết hợp cả ngày + giờ

import datetime
dt = datetime.datetime(2025, 2, 18, 14, 30, 15)
print(dt)
Có nhiều chức năng hữu ích như lấy hiện tại:
now = datetime.datetime.now()
print(now)

Lớp timedelta

Dùng để tính khoảng thời gian, cộng trừ ngày giờ

import datetime
today = datetime.date.today()
delta = datetime.timedelta(days=7)
next_week = today + delta
print("Tuần sau là:", next_week)

datetime (module)
├── datetime (class)
│ Thuộc tính:
│ ├── year
│ ├── month
│ ├── day
│ ├── hour
│ ├── minute
│ ├── second
│ ├── microsecond
│ └── tzinfo (múi giờ)
│ Phương thức chính:
│ ├── now() → lấy ngày + giờ hiện tại (local)
│ ├── today() → tương tự now(), không timezone
│ ├── utcnow() → thời gian UTC
│ ├── fromtimestamp() → từ timestamp → datetime
│ ├── timestamp() → datetime → timestamp
│ ├── combine(date, time)
│ ├── strptime() → string ➜ datetime
│ ├── strftime() → datetime ➜ string
│ ├── replace() → thay đổi giá trị year/month/…
│ └── isoformat() → dạng ISO 8601 (YYYY-MM-DDTHH:MM:SS)
├── date (class)
│ Thuộc tính:
│ ├── year
│ ├── month
│ └── day
│ Phương thức chính:
│ ├── today() → ngày hôm nay
│ ├── fromisoformat() → chuỗi ISO → date
│ ├── isoformat() → date → chuỗi ISO
│ ├── replace() → thay đổi năm/tháng/ngày
│ ├── weekday() → Thứ: 0=Mon ... 6=Sun
│ └── ctime() → Chuỗi thời gian dạng C
├── time (class)
│ Thuộc tính:
│ ├── hour
│ ├── minute
│ ├── second
│ ├── microsecond
│ └── tzinfo
│ Phương thức:
│ ├── replace()
│ ├── isoformat()
│ └── asctime() (giống ctime nhưng cho time)
├── timedelta (class)
│ Thuộc tính:
│ ├── days
│ ├── seconds
│ └── microseconds
│ Dùng để:
│ ├── Cộng trừ ngày/giờ
│ └── Tính chênh lệch thời gian
├── tzinfo (class)
│ Gốc cho múi giờ tuỳ chỉnh
└── timezone (class)
Thuộc tính:
├── UTC
└── offset (độ lệch so với UTC)
 
Phương thức:
└── tzname() → tên múi giờ

 

5. Một số vụ ngày hay sử dụng trong Python

Làm việc với kiểu date trong Python

        Để tạo một đối tượng date, bạn sử dụng lớp datetime.date(year, month, day).

import datetime
# Tạo một đối tượng date
today = datetime.date(2025, 2, 18)
print("Hôm nay là:", today)

Lấy ngày hiện tại trong Python

    Dùng phương thức today() để lấy ngày hiện tại.

today = datetime.date.today()
print("Ngày hôm nay:", today)

Làm việc với kiểu datetime

    Để tạo một đối tượng datetime, bạn sử dụng lớp datetime.datetime(year, month, day, hour, minute, second).

import datetime
now = datetime.datetime(2025, 2, 18, 14, 30, 0)
print("Thời gian hiện tại là:", now)

Lấy thời gian hiện tại trong Python

    Dùng phương thức now() để lấy ngày và giờ hiện tại.

now = datetime.datetime.now()
print("Ngày và giờ hiện tại:", now)

Tính toán với kiểu timedelta

    timedelta được sử dụng để tính toán sự khác biệt giữa hai ngày hoặc thêm bớt ngày giờ.

    import datetime
    today = datetime.date.today()
    one_day_later = today + datetime.timedelta(days=1)
    print("Ngày mai:", one_day_later)

Ví dụ kết hợp các kiểu dữ liệu ngày và giờ

import datetime
# Lấy ngày và giờ hiện tại
now = datetime.datetime.now()

# In ra ngày hiện tại
print("Ngày hiện tại:", now.date())

# In ra giờ hiện tại
print("Giờ hiện tại:", now.time())

# Thêm 10 ngày vào ngày hiện tại
ten_days_later = now + datetime.timedelta(days=10)
print("Ngày sau 10 ngày:", ten_days_later.date())

strftime(format)

    Định dạng ngày giờ theo một chuỗi mẫu.

  strftime là viết tắt của "string format time". Đây là một hàm trong lập trình, đặc biệt là trong Python, dùng để chuyển đổi đối tượng thời gian (time object) thành chuỗi (string) theo định dạng mà người dùng yêu cầu.

today = datetime.date.today()
formatted_date = today.strftime("%d/%m/%Y")
print("Ngày định dạng:", formatted_date)

Cú pháp strftime trong Python được sử dụng để chuyển đổi một đối tượng datetime thành chuỗi với định dạng mà bạn chỉ định. Hàm strftime sử dụng các ký hiệu đặc biệt để định dạng ngày và giờ.

Cú pháp chung của strftime là:
datetime_object.strftime(format)

Trong đó:

    datetime_object là một đối tượng datetime hoặc date (tạo từ module datetime).
    format là chuỗi định dạng mà bạn muốn sử dụng.

Dưới đây là một số ký hiệu thường dùng trong strftime để định dạng ngày và giờ:
Các ký hiệu định dạng phổ biến trong strftime:

Đối với ngày tháng:

    %Y: Năm đầy đủ (ví dụ: 2025)
    %y: Hai chữ số cuối của năm (ví dụ: 25)
    %m: Tháng (01 đến 12)
    %d: Ngày trong tháng (01 đến 31)
    %A: Tên đầy đủ của ngày trong tuần (ví dụ: Monday, Tuesday)
    %a: Viết tắt của tên ngày trong tuần (ví dụ: Mon, Tue)
    %B: Tên đầy đủ của tháng (ví dụ: January, February)
    %b: Viết tắt của tên tháng (ví dụ: Jan, Feb)

Đối với giờ, phút, giây:

    %H: Giờ theo định dạng 24 giờ (00 đến 23)
    %I: Giờ theo định dạng 12 giờ (01 đến 12)
    %M: Phút (00 đến 59)
    %S: Giây (00 đến 59)
    %p: AM/PM (ví dụ: AM, PM)

import datetime
# Tạo một đối tượng datetime
now = datetime.datetime.now()
# Định dạng ngày giờ theo yêu cầu
formatted_date = now.strftime("%A, %d %B %Y, %I:%M %p")
# In kết quả
print(formatted_date)

strptime(date_string, format)

  Chuyển đổi chuỗi thành đối tượng datetime theo định dạng cho trước.

  strptime là viết tắt của "string parse time", là hàm dùng để chuyển đổi một chuỗi (string) thành đối tượng thời gian (time object) theo định dạng mà người dùng chỉ định.

 Cú pháp strptime

datetime.strptime(date_string, format)

    date_string: Chuỗi chứa ngày tháng và thời gian cần chuyển đổi.
    format: Định dạng ngày tháng, giờ mà chuỗi đầu vào có.

Ví dụ:

Giả sử bạn có chuỗi "2025-02-22 14:30:00", và bạn muốn chuyển nó thành một đối tượng datetime:

from datetime import datetime

date_string = "2025-02-22 14:30:00"
format = "%Y-%m-%d %H:%M:%S"

# Chuyển chuỗi thành đối tượng datetime
date_object = datetime.strptime(date_string, format)

print(date_object)


Kết quả:

2025-02-22 14:30:00

 Trong ví dụ trên:

    %Y là năm (4 chữ số)
    %m là tháng (2 chữ số)
    %d là ngày (2 chữ số)
    %H là giờ (theo định dạng 24 giờ)
    %M là phút
    %S là giây

Tìm kiếm:

Bài viết liên quan:

Trong Python, kiểu dữ liệu ngày tháng năm (date) được xử lý chủ yếu bằng thư viện datetime. Thư viện này cung cấp các lớp giúp bạn làm việc với ngày tháng và giờ.