Datetime trong Python là module mạnh mẽ giúp lập trình viên dễ dàng thao tác với ngày và giờ trong các ứng dụng. Bài viết này sẽ giúp bạn hiểu rõ hơn về các chức năng của module, các đối tượng và thuộc tính quan trọng, cùng với cách sử dụng các phương thức để xử lý thời gian hiệu quả.
Điểm chính cần nắm
- Datetime trong Python là gì?: Giới thiệu về module datetime trong Python và các chức năng cơ bản của nó.
- Tick interval là gì?: Giải thích về khoảng thời gian nhỏ nhất giữa các sự kiện trong hệ thống.
- TimeTuple là gì?: Định nghĩa về TimeTuple, một cấu trúc dữ liệu trong Python chứa thông tin thời gian.
- Lấy thời gian hiện tại – Current Time: Cách lấy thời gian hiện tại từ hệ thống bằng module datetime.
- Thiết lập định dạng thời gian theo ý muốn – Formatted Time: Cách định dạng thời gian theo yêu cầu người dùng trong Python.
- Lấy thông tin lịch tháng: Hướng dẫn cách lấy thông tin về các ngày trong tháng.
- Module time trong Python: Giới thiệu module time trong Python, giúp thao tác với thời gian hệ thống.
- Các function trong module calendar: Cung cấp các hàm hữu ích để làm việc với lịch.
- Module datetime trong Python: Tổng quan về module datetime và các lớp quan trọng trong đó.
- Giá trị date trong Python: Làm việc với giá trị ngày trong Python và các phương thức liên quan.
- Python time Module: Giới thiệu về module time, giúp làm việc với thời gian trong Python.
- Đối tượng datetime trong Python: Định nghĩa và các phương thức làm việc với đối tượng datetime trong Python.
- Đối tượng timedelta: Giới thiệu về đối tượng timedelta và cách sử dụng nó trong Python để thao tác với thời gian.
- Vietnix – Nhà cung cấp dịch vụ lưu trữ đáng tin cậy với tốc độ và bảo mật vượt trội: Cung cấp các dịch vụ lưu trữ như VPS, hosting, server và bảo mật cao cho khách hàng.
- FAQ: Cung cấp các câu hỏi thường gặp giúp giải đáp các thắc mắc phổ biến về datetime và Python.
Datetime trong Python là gì?
Datetime trong Python là một module cung cấp các lớp và phương thức giúp làm việc với ngày giờ, cho phép thực hiện các phép toán, định dạng và xử lý thời gian trong lập trình. Việc chuyển đổi giữa các định dạng ngày là một tác vụ phổ biến trong lập trình. Python cung cấp các module tiêu chuẩn để hỗ trợ xử lý ngày và giờ, bao gồm:
- datetime: Cung cấp các class và method để làm việc với ngày và thời gian
- time: Xử lý thời gian ở mức hệ thống, hỗ trợ đo thời gian và làm việc với epoch (mốc thời gian bắt đầu).
- calendar: Hỗ trợ thao tác với lịch, như hiển thị tháng hoặc năm dưới dạng văn bản

Các chức năng chính của module datetime
Module datetime
cung cấp một loạt các chức năng hỗ trợ người dùng làm việc với ngày và giờ. Những chức năng này giúp bạn dễ dàng lấy thông tin ngày giờ hiện tại, định dạng thời gian theo nhiều cách khác nhau, tính toán khoảng thời gian giữa các thời điểm và chuyển đổi giữa ngày giờ và chuỗi. Một số chức năng chính của module này bao gồm:
- Lấy ngày và giờ hiện tại
- Định dạng ngày giờ theo nhiều kiểu khác nhau
- Tính toán khoảng thời gian giữa hai thời điểm
- Chuyển đổi giữa ngày giờ và chuỗi
Các đối tượng quan trọng trong module datetime
Module datetime
bao gồm một số đối tượng chính giúp bạn thao tác dễ dàng với ngày giờ và khoảng thời gian. Các đối tượng quan trọng này bao gồm:
datetime.date
: Đại diện cho một ngày (năm, tháng, ngày)datetime.time
: Đại diện cho một thời điểm trong ngày (giờ, phút, giây, microsecond)datetime.datetime
: Kết hợp cả ngày và giờdatetime.timedelta
: Biểu diễn khoảng thời gian giữa hai thời điểmdatetime.tzinfo
: Cung cấp thông tin về múi giờ
Tick interval là gì?
Tick interval trong Python là đơn vị đo thời gian tính bằng số giây kể từ epoch time (12:00 AM, ngày 1 tháng 1 năm 1970 theo UTC). Python sử dụng tick interval để biểu diễn thời gian dưới dạng số thực (float). Module time
trong Python cung cấp các hàm làm việc với thời gian và chuyển đổi giữa các biểu diễn thời gian. Hàm time.time()
trả về thời gian hệ thống hiện tại tính bằng số giây kể từ epoch.
Ví dụ:
import time # This is required to include time module.
ticks = time.time()
print ("Number of ticks since 12:00am, August 1, 2024:", ticks)
Kết quả:
Number of ticks since 12:00am, August 1, 2024: 1724301316.1937954
Ứng dụng của Tick Interval
Tick interval, hay khoảng thời gian giữa các lần “tick”, có thể được sử dụng trong nhiều trường hợp khác nhau trong lập trình. Dưới đây là một số ứng dụng phổ biến:
- Đo thời gian thực thi của chương trình: Tick interval giúp xác định thời gian thực thi của một đoạn mã hoặc chương trình bằng cách ghi lại thời gian bắt đầu và kết thúc.
- Tạo timestamp cho log hoặc dữ liệu: Tick interval có thể được sử dụng để tạo các dấu thời gian (timestamp) cho log hoặc dữ liệu, giúp theo dõi quá trình hoạt động của hệ thống.
- Tính toán khoảng thời gian giữa hai thời điểm: Tick interval có thể giúp tính toán khoảng cách giữa hai thời điểm, hỗ trợ trong các bài toán cần xác định thời gian đã trôi qua giữa các sự kiện.
Ví dụ:
import time
start = time.time() # Lấy thời gian bắt đầu
# Chạy một đoạn code giả lập
for _ in range(1000000):
pass
end = time.time() # Lấy thời gian kết thúc
print("Thời gian thực thi:", end - start, "giây")
Kết quả:
Thời gian thực thi: 0.05 giây
TimeTuple là gì?
Trong Python, TimeTuple là một cấu trúc dữ liệu dạng tuple gồm 9 phần tử, đại diện cho một thời điểm cụ thể. Nhiều hàm trong module time
sử dụng TimeTuple để làm việc với ngày và giờ.
Chỉ mục | Trường | Giá trị |
---|---|---|
0 | Năm (tm_year ) | 4 chữ số (VD: 2025) |
1 | Tháng (tm_mon ) | 1 – 12 |
2 | Ngày (tm_mday ) | 1 – 31 |
3 | Giờ (tm_hour ) | 0 – 23 |
4 | Phút (tm_min ) | 0 – 59 |
5 | Giây (tm_sec ) | 0 – 61 (có giây nhuận) |
6 | Ngày trong tuần (tm_wday ) | 0 (Thứ Hai) – 6 (Chủ Nhật) |
7 | Ngày trong năm (tm_yday ) | 1 – 366 |
8 | Giờ mùa hè (tm_isdst ) | -1, 0, 1 (-1 để tự động xác định) |
Ví dụ:
import time
# Lấy thời gian hiện tại dưới dạng TimeTuple
current_time = time.localtime()
print(current_time)
Kết quả:
time.struct_time(tm_year=2025, tm_mon=3, tm_mday=19, tm_hour=14, tm_min=30, tm_sec=45, tm_wday=2, tm_yday=78, tm_isdst=0)
Ở đây:
tm_year=2025
: Năm 2025tm_mon=3
: Tháng 3tm_mday=19
: Ngày 19tm_hour=14
: Giờ 14 (2 giờ chiều)tm_min=30
: Phút 30tm_sec=45
: Giây 45tm_wday=2
: Thứ Tư (vì 0 là Thứ Hai)tm_yday=78
: Ngày thứ 78 trong nămtm_isdst=0
: Không áp dụng giờ mùa hè
Lấy thời gian hiện tại – Current Time
Để chuyển đổi thời gian từ số giây tính từ epoch sang time-tuple, chỉ cần truyền giá trị đó vào function như localtime
. Function này sẽ trả về một time-tuple với đầy đủ 9 thành phần hợp lệ.
Ví dụ:
import time
localtime = time.localtime(time.time())
print("Thời gian hiện tại:", localtime)
Kết quả: Sau khi lệnh chạy xong, thông tin có thể được định dạng theo bất kỳ cách nào khác để hiển thị đẹp hơn.
Thời gian hiện tại: time.struct_time(tm_year=2025, tm_mon=3, tm_mday=19, tm_hour=14, tm_min=30, tm_sec=15, tm_wday=2, tm_yday=78, tm_isdst=0)
Thiết lập định dạng thời gian theo ý muốn – Formatted Time
Nếu muốn hiển thị thời gian theo cách trực quan hơn, bạn có thể dùng function asctime()
. Function này giúp chuyển đổi time-tuple thành chuỗi thời gian có định dạng dễ đọc.
Ví dụ:
import time
localtime = time.asctime(time.localtime(time.time()))
print("Thời gian hiện tại:", localtime)
Kết quả:
Thời gian hiện tại: Wed Mar 19 14:30:15 2025
Lấy thông tin lịch tháng
Module calendar
trong Python cung cấp nhiều method để làm việc với lịch năm và tháng. Bạn có thể sử dụng function month()
để hiển thị lịch của một tháng cụ thể.
Ví dụ:
import calendar
cal = calendar.month(2025, 3)
print("Lịch tháng 3 năm 2025:")
print(cal)
Kết quả:
Lịch tháng 3 năm 2025:
March 2025
Mo Tu We Th Fr Sa Su
______________1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Module time trong Python
Module time
cung cấp các function để làm việc với thời gian và chuyển đổi giữa các định dạng thời gian khác nhau. Dưới đây là danh sách một số function quan trọng:
Function | Mô tả |
---|---|
time.altzone | Độ lệch của múi giờ DST (giờ mùa hè) so với UTC, tính bằng giây. |
time.asctime([tupletime]) | Chuyển một time-tuple thành chuỗi 24 ký tự có định dạng dễ đọc, ví dụ: 'Tue Dec 11 18:07:14 2008' . |
time.ctime([secs]) | Chuyển đổi số giây từ epoch thành chuỗi thời gian dễ đọc (tương tự asctime(localtime(secs)) ). |
time.gmtime([secs]) | Chuyển đổi số giây từ epoch thành time-tuple theo giờ UTC. |
time.localtime([secs]) | Chuyển đổi số giây từ epoch thành time-tuple theo giờ địa phương. |
time.mktime(tupletime) | Chuyển time-tuple thành số giây từ epoch. |
time.sleep(secs) | Tạm dừng chương trình trong khoảng thời gian secs giây. |
time.strftime(fmt[, tupletime]) | Định dạng một time-tuple thành chuỗi theo mẫu fmt . |
time.strptime(str, fmt='%a %b %d %H:%M:%S %Y') | Phân tích chuỗi thời gian theo mẫu fmt và chuyển thành time-tuple. |
time.time() | Trả về thời gian hiện tại tính bằng số giây từ epoch. |
time.tzset() | Cập nhật quy tắc chuyển đổi thời gian theo biến môi trường TZ . |
Có hai thuộc tính quan trọng có sẵn với mô-đun thời gian.
Attribute | Mô tả |
---|---|
time.timezone | Độ lệch của múi giờ địa phương (không tính DST) so với UTC, tính bằng giây. |
time.tzname | Cặp giá trị thể hiện tên của múi giờ địa phương, bao gồm phiên bản có DST và không có DST. |
Các function trong module calendar
Module calendar
trong Python hỗ trợ thao tác với ngày tháng, bao gồm hiển thị lịch, kiểm tra năm nhuận, xác định ngày trong tuần và nhiều tính năng hữu ích khác. Theo mặc định, tuần bắt đầu từ thứ Hai, nhưng có thể thay đổi bằng calendar.setfirstweekday()
. Dưới đây là các function quan trọng trong module calendar
:
Function | Mô tả |
---|---|
calendar.calendar(year, w=2, l=1, c=6) | Trả về một chuỗi nhiều dòng chứa lịch của năm year , được định dạng thành ba cột. |
calendar.firstweekday() | Trả về ngày bắt đầu của tuần hiện tại (mặc định là 0 – Thứ Hai). |
calendar.isleap(year) | Kiểm tra xem year có phải là năm nhuận hay không. |
calendar.leapdays(y1, y2) | Đếm số năm nhuận trong khoảng từ y1 đến y2 (không tính y2 ). |
calendar.month(year, month, w=2, l=1) | Trả về một chuỗi nhiều dòng chứa lịch của tháng month trong năm year . |
calendar.monthcalendar(year, month) | Trả về danh sách các danh sách số nguyên. Mỗi danh sách con biểu diễn một tuần, với ngày ngoài tháng được đặt thành 0. |
calendar.monthrange(year, month) | Trả về hai số nguyên: số thứ tự ngày trong tuần của ngày đầu tiên của tháng và số ngày trong tháng đó. |
calendar.prcal(year, w=2, l=1, c=6) | In ra lịch của năm year , giống như print(calendar.calendar(year, w, l, c)) . |
calendar.prmonth(year, month, w=2, l=1) | In ra lịch của tháng month trong năm year , giống như print(calendar.month(year, month, w, l)) . |
calendar.setfirstweekday(weekday) | Đặt ngày bắt đầu của tuần thành weekday (0 = Thứ Hai, 6 = Chủ Nhật). |
calendar.timegm(tupletime) | Chuyển đổi một time-tuple thành số giây kể từ epoch (ngược lại với time.gmtime ). |
calendar.weekday(year, month, day) | Trả về số thứ tự ngày trong tuần của một ngày cụ thể (0 = Thứ Hai, 6 = Chủ Nhật). |
Module datetime trong Python
Module datetime
trong Python cung cấp các class để thao tác với ngày giờ và thực hiện các phép toán liên quan đến thời gian. Đối tượng trong datetime
có thể thuộc một trong hai loại:
- Aware: Có thông tin về múi giờ.
- Naïve: Không chứa thông tin múi giờ.
- Đối tượng
date
luôn là naïve, trong khitime
vàdatetime
có thể là aware.
Giá trị date
trong Python
Một giá trị kiểu date
trong Python đại diện cho một ngày cụ thể với năm, tháng và ngày. Giá trị này tuân theo lịch Gregory và có thể được mở rộng vô hạn về cả hai hướng.
Cú pháp:
datetime.date(year, month, day)
Các tham số phải là số nguyên và nằm trong khoảng:
year
: TừMINYEAR
đếnMAXYEAR
.month
: Từ1
đến12
.day
: Từ1
đến số ngày tối đa của tháng đó.
Nếu truyền vào giá trị không hợp lệ, Python sẽ báo lỗi ValueError
.
Ví dụ:
from datetime import date
ngay_hien_tai = date(2025, 3, 19)
print("Ngày hiện tại:", ngay_hien_tai)
ngay_loi = date(2025, 2, 30) # Lỗi vì tháng 2 không có ngày 30
Kết quả:
Ngày hiện tại: 2025-03-19
Traceback (most recent call last):
…
ValueError: day is out of range for month
Thuộc tính của date trong Python
Dưới đây là các thuộc tính quan trọng của date
trong Python:
date.min
– Ngày nhỏ nhất có thể đại diện, tương ứng vớidate(1, 1, 1)
.date.max
– Ngày lớn nhất có thể đại diện, tương ứng vớidate(9999, 12, 31)
.date.resolution
– Độ chính xác nhỏ nhất giữa hai giá trịdate
khác nhau (thường là 1 ngày).date.year
– Lấy giá trị năm (từMINYEAR
đếnMAXYEAR
).date.month
– Lấy giá trị tháng (từ1
đến12
).date.day
– Lấy giá trị ngày trong tháng.
Ví dụ:
from datetime import date
# Lấy giá trị nhỏ nhất và lớn nhất
print("Ngày nhỏ nhất:", date.min)
print("Ngày lớn nhất:", date.max)
# Lấy ngày hôm nay
hom_nay = date.today()
print("Năm:", hom_nay.year)
print("Tháng:", hom_nay.month)
print("Ngày:", hom_nay.day)
Kết quả:
Ngày nhỏ nhất: 0001-01-01
Ngày lớn nhất: 9999-12-31
Năm: 2025
Tháng: 3
Ngày: 19
Class method trong date
Các class method trong đối tượng date
của module datetime
cung cấp các phương thức tiện ích để tạo và làm việc với đối tượng ngày. Dưới đây là một số phương thức phổ biến:
- today(): Trả về ngày hiện tại theo giờ địa phương.
- fromtimestamp(timestamp): Trả về ngày địa phương tương ứng với timestamp POSIX, như được trả về bởi
time.time()
. - fromordinal(ordinal): Trả về ngày tương ứng với thứ tự Gregorian proleptic, trong đó ngày 1 tháng 1 của năm 1 có thứ tự là 1.
- fromisoformat(date_string): Trả về ngày tương ứng với chuỗi
date_string
được đưa ra trong bất kỳ định dạng ISO 8601 hợp lệ nào, ngoại trừ các ngày có thứ tự.
Ví dụ:
from datetime import date
print (date.today())
d1=date.fromisoformat('2024-04-20')
print (d1)
d2=date.fromisoformat('20240420')
print (d2)
d3=date.fromisoformat('2024-W16-4')
print (d3)
Kết quả:
2024-08-22
2024-04-20
2024-04-20
2024-04-18
Các phương thức instance trong class Python
Các phương thức instance trong class date
cho phép bạn thao tác và lấy thông tin từ đối tượng ngày. Dưới đây là một số phương thức phổ biến:
- replace(): Trả về một đối tượng
date
mới bằng cách thay thế các thuộc tính được chỉ định với các giá trị mới được xác định thông qua các đối số từ khóa. - timetuple(): Trả về một đối tượng
time.struct_time
, giống như kết quả trả về từtime.localtime()
. - toordinal(): Trả về số thứ tự Gregorian của ngày, trong đó ngày 1 tháng 1 của năm 1 có số thứ tự là 1. Đối với bất kỳ đối tượng
date
nào,date.fromordinal(d.toordinal()) == d
. - weekday(): Trả về ngày trong tuần dưới dạng một số nguyên, trong đó Thứ Hai là 0 và Chủ Nhật là 6.
- isoweekday(): Trả về ngày trong tuần dưới dạng một số nguyên, trong đó Thứ Hai là 1 và Chủ Nhật là 7.
- isocalendar(): Trả về một đối tượng
namedtuple
với ba thành phần: năm (year), tuần (week), và ngày trong tuần (weekday). - isoformat(): Trả về một chuỗi đại diện cho ngày tháng theo định dạng ISO 8601, YYYY-MM-DD.
- str(): Đối với một đối tượng
date
d,str(d)
tương đương vớid.isoformat()
. - ctime(): Trả về một chuỗi đại diện cho ngày tháng.
- strftime(format): Trả về một chuỗi đại diện cho ngày tháng, được kiểm soát bởi một chuỗi định dạng rõ ràng.
- format(format): Tương tự như
date.strftime()
.
Ví dụ:
from datetime import date
# Lấy ngày hôm nay
hom_nay = date.today()
print("Hôm nay:", hom_nay)
print("Cấu trúc timetuple:", hom_nay.timetuple())
# Các phương thức liên quan đến định dạng chuỗi
print("Định dạng ISO:", hom_nay.isoformat())
print("Định dạng dd/mm/yy:", hom_nay.strftime("%d/%m/%y"))
print("Định dạng đầy đủ:", hom_nay.strftime("%A %d. %B %Y"))
print("Chuỗi ctime:", hom_nay.ctime())
# Định dạng chuỗi với format
print("The {1} is {0:%d}, the {2} is {0:%B}.".format(hom_nay, "day", "month"))
# Trích xuất thành phần ngày tháng
t = hom_nay.timetuple()
print("Các giá trị trong timetuple:")
for i in t:
print(i)
ic = hom_nay.isocalendar()
print("Các giá trị trong isocalendar:")
for i in ic:
print(i)
# Thay đổi tháng nhưng giữ nguyên ngày
print("Thay đổi tháng thành 5:", hom_nay.replace(month=5))
Kết quả:
Hôm nay: 2025-03-19
Cấu trúc timetuple: time.struct_time(tm_year=2025, tm_mon=3, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=78, tm_isdst=-1)
Định dạng ISO: 2025-03-19
Định dạng dd/mm/yy: 19/03/25
Định dạng đầy đủ: Wednesday 19. March 2025
Chuỗi ctime: Wed Mar 19 00:00:00 2025
The day is 19, the month is March.
Các giá trị trong timetuple:
2025
3
19
0
0
0
2
78
-1
Các giá trị trong isocalendar:
2025
12
3
Thay đổi tháng thành 5: 2025-05-19
Python time Module
Lớp time
trong module datetime
đại diện cho một thời điểm trong ngày mà không gắn với ngày cụ thể. Nếu đối tượng chứa thông tin về múi giờ (tzinfo
), nó là “aware”. Nếu tzinfo
là None
, đối tượng sẽ là “naive” (không có múi giờ).
Cú pháp:
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Tất cả các đối số đều là tùy chọn. tzinfo
có thể là None, hoặc là một đối tượng của lớp con tzinfo
. Các đối số còn lại phải là số nguyên trong các phạm vi sau:
- Giờ (hour) − 0 <= hour < 24,
- Phút (minute) − 0 <= minute < 60,
- Giây (second) − 0 <= second < 60,
- Micro giây (microsecond) − 0 <= microsecond < 1000000
Nếu bất kỳ đối số nào ngoài các phạm vi này được đưa ra, sẽ phát sinh lỗi ValueError.
Ví dụ:
from datetime import time
time1 = time(8, 14, 36)
print("Time:", time1)
time2 = time(minute=12)
print("Time:", time2)
time3 = time()
print("Time:", time3)
time4 = time(hour=26) # Lỗi ValueError vì 26 nằm ngoài phạm vi 0–23
Kết quả:
Time: 08:14:36
Time: 00:12:00
Time: 00:00:00
Traceback (most recent call last):
File “<stdin>”, line 12, in <module>
time4 = time(hour=26)
ValueError: hour must be in 0..23
Thuộc tính của lớp time
Lớp time
trong module datetime
cung cấp các thuộc tính sau để thao tác với thời gian:
- time.min: Thời gian sớm nhất có thể biểu diễn, là
time(0, 0, 0, 0)
(00:00:00.000000). - time.max: Thời gian muộn nhất có thể biểu diễn, là
time(23, 59, 59, 999999)
(23:59:59.999999). - time.resolution: Sự khác biệt nhỏ nhất có thể có giữa các đối tượng
time
không bằng nhau, làtimedelta(microseconds=1)
.
Ví dụ:
from datetime import time
print(time.min)
print(time.max)
print(time.resolution)
Kết quả:
00:00:00
23:59:59.999999
0:00:00.000001
Thuộc tính của đối tượng time
Các thuộc tính của đối tượng time
cho phép truy xuất thông tin về giờ, phút, giây và microsecond, cụ thể như sau:
- time.hour: Giờ trong phạm vi (0, 24).
- time.minute: Phút trong phạm vi (0, 60).
- time.second: Giây trong phạm vi (0, 60).
- time.microsecond: Microsecond trong phạm vi (0, 1000000).
- time.tzinfo: Đối tượng
tzinfo
đã được truyền vào hàm tạo đối tượngtime
, hoặcNone
nếu không có múi giờ.
Ví dụ:
from datetime import time
t = time(8, 23, 45, 5000)
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
Kết quả:
8
23
45
5000
Phương thức instance của object trong Python
Các phương thức của đối tượng time
giúp thao tác với thời gian, bao gồm các chức năng như thay đổi giá trị các thuộc tính, định dạng thời gian, và làm việc với múi giờ:
- replace(): Trả về một đối tượng
time
với các giá trị giống nhau, ngoại trừ các thuộc tính được thay thế bởi các giá trị mới thông qua các đối số từ khóa. - isoformat(): Trả về một chuỗi đại diện cho thời gian theo định dạng ISO 8601.
- str(): Đối với một đối tượng
time
t,str(t)
tương đương vớit.isoformat()
. - strftime(format): Trả về một chuỗi đại diện cho thời gian, được kiểm soát bởi một chuỗi định dạng rõ ràng.
- format(format): Tương tự như
time.strftime()
, trả về chuỗi định dạng thời gian theo yêu cầu. - utcoffset(): Nếu
tzinfo
làNone
, trả vềNone
, ngược lại trả vềself.tzinfo.utcoffset(None)
. - dst(): Nếu
tzinfo
làNone
, trả vềNone
, ngược lại trả vềself.tzinfo.dst(None)
. - tzname(): Nếu
tzinfo
làNone
, trả vềNone
, ngược lại trả vềself.tzinfo.tzname(None)
.
Đối tượng datetime trong Python
Lớp datetime
trong Python đại diện cho cả ngày và giờ, kết hợp thông tin ngày và thời gian trong một đối tượng. Lớp này sử dụng lịch Gregorian và có chính xác 86.400 giây trong mỗi ngày, với khả năng mở rộng theo cả hai hướng. Một đối tượng datetime
chứa thông tin về cả ngày và giờ, đồng thời tuân theo quy chuẩn của lịch Gregorian và có 24 giờ mỗi ngày (3600 giây x 24).
Cú pháp:
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
- Các tham số
year
,month
vàday
là bắt buộc. - Các tham số còn lại có giá trị mặc định là
0
. tzinfo
có thể làNone
hoặc một đối tượng múi giờ.fold
được sử dụng để phân biệt các khoảng thời gian trùng lặp do chuyển đổi múi giờ (0 hoặc 1).
Phạm vi giá trị hợp lệ
Khi làm việc với đối tượng datetime
trong Python, mỗi thuộc tính của nó đều có một phạm vi giá trị hợp lệ. Những giá trị này phải tuân theo các quy tắc cụ thể để đảm bảo tính chính xác khi thao tác với ngày và giờ. Nếu bất kỳ giá trị nào vượt quá phạm vi cho phép, chương trình sẽ phát sinh lỗi. Dưới đây là các phạm vi giá trị hợp lệ cho từng thuộc tính trong datetime
.
year
:MINYEAR <= year <= MAXYEAR
month
:1 <= month <= 12
day
:1 <= day <= số ngày trong tháng đó của năm đó
hour
:0 <= hour < 24
minute
:0 <= minute < 60
second
:0 <= second < 60
microsecond
:0 <= microsecond < 1.000.000
fold
:0 hoặc 1
Nếu bất kỳ giá trị nào nằm ngoài phạm vi này, ValueError
sẽ được đưa ra.
Ví dụ:
from datetime import datetime
dt1 = datetime(2023, 4, 20)
print(dt1)
dt2 = datetime(2023, 4, 20, 11, 6, 32, 5000)
print(dt2)
Kết quả:
2023-04-20 00:00:00
2023-04-20 11:06:32.005000
Thuộc tính của lớp datetime
Lớp datetime
trong Python cung cấp một số thuộc tính quan trọng giúp xác định phạm vi và độ chính xác của thời gian, giúp người dùng làm việc với các giá trị ngày giờ một cách linh hoạt và chính xác. Những thuộc tính này bao gồm các giá trị sớm nhất và muộn nhất có thể, cùng với độ phân giải của thời gian.
- datetime.min − Thời điểm sớm nhất có thể biểu diễn,
datetime(MINYEAR, 1, 1, tzinfo=None)
. - datetime.max − Thời điểm muộn nhất có thể biểu diễn,
datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
. - datetime.resolution − Sự khác biệt nhỏ nhất có thể có giữa các đối tượng
datetime
không bằng nhau,timedelta(microseconds=1)
.
Ví dụ:
from datetime import datetime
print("Min DateTime:", datetime.min)
print("Max DateTime:", datetime.max)
print("Resolution:", datetime.resolution)
Kết quả:
Min DateTime: 0001-01-01 00:00:00
Max DateTime: 9999-12-31 23:59:59.999999
Resolution: 0:00:00.000001
Thuộc tính của đối tượng datetime
Khi làm việc với đối tượng datetime
trong Python, chúng ta có thể truy cập các thuộc tính giúp phân tích và thao tác với các thành phần thời gian. Các thuộc tính này cung cấp thông tin chi tiết về ngày, giờ, phút, giây, microsecond, múi giờ, cũng như một số đặc điểm khác của đối tượng thời gian, như khả năng phân biệt thời gian bị lặp trong các múi giờ có Daylight Saving Time (DST).
datetime.year
: Năm, nằm trong khoảng từMINYEAR
đếnMAXYEAR
.datetime.month
: Tháng, nằm trong khoảng từ1 đến 12
.datetime.day
: Ngày, nằm trong khoảng từ1
đến số ngày tối đa của tháng tương ứng.datetime.hour
: Giờ, nằm trong khoảng0 đến 23
.datetime.minute
: Phút, nằm trong khoảng0 đến 59
.datetime.second
: Giây, nằm trong khoảng0 đến 59
.datetime.microsecond
: Microsecond, nằm trong khoảng0 đến 999999
.datetime.tzinfo
: Thông tin về múi giờ, có thể làNone
hoặc một đối tượng múi giờ.datetime.fold
: Giá trị0
hoặc1
, giúp phân biệt thời gian bị lặp trong các múi giờ có DST (giờ mùa hè).
Ví dụ:
from datetime import datetime
dt = datetime.now()
print("Day:", dt.day)
print("Month:", dt.month)
print("Year:", dt.year)
print("Hour:", dt.hour)
print("Minute:", dt.minute)
print("Second:", dt.second)
Kết quả:
Day: 20
Month: 4
Year: 2023
Hour: 15
Minute: 5
Second: 52
Phương thức lớp của đối tượng datetime
Dưới đây là các phương thức lớp của đối tượng datetime
, giúp bạn dễ dàng truy cập và tạo các đối tượng datetime
từ những nguồn khác nhau, ví dụ như lấy ngày giờ hiện tại, chuyển đổi từ timestamp hoặc từ chuỗi theo định dạng ISO 8601.
today()
: Trả về ngày giờ hiện tại theo múi giờ địa phương, không có thông tintzinfo
.now(tz=None)
: Trả về ngày giờ hiện tại, có thể truyềntz
để lấy theo múi giờ cụ thể.utcnow()
: Trả về ngày giờ hiện tại theo UTC, không có thông tintzinfo
.utcfromtimestamp(timestamp)
: Trả vềdatetime
UTC từ timestamp POSIX, không cótzinfo
.fromtimestamp(timestamp, timezone.utc)
: Tạodatetime
từ timestamp POSIX, tương đươngdatetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
.fromordinal(ordinal)
: Chuyển đổi ordinal (số nguyên Gregorian) thànhdatetime
. Ngày 1/1 năm 1 có ordinal là1
.fromisoformat(date_string)
: Tạodatetime
từ chuỗi theo định dạng ISO 8601.
Phương thức của đối tượng datetime
Dưới đây là các phương thức của đối tượng datetime
, cho phép bạn thao tác với các thuộc tính ngày, giờ, múi giờ và chuyển đổi chúng thành các định dạng khác nhau. Các phương thức này giúp bạn dễ dàng truy xuất, thay đổi hoặc chuyển đổi các giá trị liên quan đến thời gian.
- date() − Trả về đối tượng date với cùng năm, tháng và ngày.
- time() − Trả về đối tượng time với cùng giờ, phút, giây, microsecond và fold.
- timetz() − Trả về đối tượng time với cùng giờ, phút, giây, microsecond, fold và các thuộc tính tzinfo. Xem thêm phương thức
time()
. - replace() − Trả về datetime với các thuộc tính giống nhau, ngoại trừ các thuộc tính đã được thay thế bằng các giá trị mới thông qua các đối số từ khóa được chỉ định.
- astimezone(tz=None) − Trả về đối tượng datetime với thuộc tính tzinfo mới là tz.
- utcoffset() − Nếu
tzinfo
là None, trả về None, ngược lại trả vềself.tzinfo.utcoffset(self)
. - dst() − Nếu
tzinfo
là None, trả về None, ngược lại trả vềself.tzinfo.dst(self)
. - tzname() − Nếu
tzinfo
là None, trả về None, ngược lại trả vềself.tzinfo.tzname(self)
. - timetuple() − Trả về một đối tượng
time.struct_time
tương tự như được trả về bởitime.localtime()
. - datetime.toordinal() − Trả về số thứ tự Gregorian của ngày.
- timestamp() − Trả về timestamp POSIX tương ứng với đối tượng datetime.
- isoweekday() − Trả về ngày trong tuần dưới dạng số nguyên, trong đó Thứ Hai là 1, Chủ Nhật là 7.
- isocalendar() − Trả về một named tuple với ba thành phần: năm (year), tuần (week) và ngày trong tuần (weekday).
- isoformat(sep=’T’, timespec=’auto’) − Trả về một chuỗi đại diện cho ngày và thời gian theo định dạng ISO 8601.
- __str__() − Đối với một đối tượng datetime
d
,str(d)
tương đương vớid.isoformat(' ')
. - ctime() − Trả về một chuỗi đại diện cho ngày và thời gian.
- strftime(format) − Trả về một chuỗi đại diện cho ngày và thời gian, được kiểm soát bởi một chuỗi định dạng rõ ràng.
- __format__(format) − Tương tự như
strftime()
.
Ví dụ:
from datetime import datetime, date, time, timezone
# Kết hợp date và time
d = date(2022, 4, 20)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
# Ngày giờ hiện tại
print(datetime.now())
# Chuyển chuỗi sang datetime
dt = datetime.strptime("23/04/20 16:30", "%d/%m/%y %H:%M")
print(dt)
# Lấy tuple các thuộc tính thời gian
tt = dt.timetuple()
print(tt)
# Lấy tuần theo ISO
ic = dt.isocalendar()
print(ic)
Kết quả:
2022-04-20 12:30:00
2023-04-20 15:12:49.816343
2020-04-23 16:30:00
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=23, tm_hour=16, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=114, tm_isdst=-1)
(2020, 17, 4)
Đối tượng timedelta
timedelta
là một đối tượng trong module datetime
của Python, dùng để biểu diễn khoảng thời gian giữa hai đối tượng date
hoặc time
. Đối tượng này giúp tính toán và xử lý các khoảng thời gian, ví dụ như cộng hoặc trừ các giá trị ngày giờ, hoặc tính độ chênh lệch giữa hai thời điểm.
Cú pháp:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Nội bộ, các thuộc tính được lưu trữ trong ngày, giây và microsecond. Các đối số khác được chuyển đổi sang các đơn vị này:
milliseconds
→microseconds
(1 ms = 1000 µs).minutes
→seconds
(1 phút = 60 giây).hours
→seconds
(1 giờ = 3600 giây).weeks
→days
(1 tuần = 7 ngày).
Ví dụ:
from datetime import timedelta
delta = timedelta(
days=100,
seconds=27,
microseconds=10,
milliseconds=29000,
minutes=5,
hours=12,
weeks=2
)
# Only days, seconds, and microseconds remain
print (delta)
Kết quả:
114 days, 12:05:56.000010
Toán tử với timedelta
Dưới đây là ví dụ về cách sử dụng toán tử với đối tượng timedelta
. timedelta
có thể được dùng để cộng hoặc trừ với đối tượng datetime
, giúp tính toán các khoảng thời gian cụ thể.
Ví dụ:
from datetime import datetime, timedelta
date1 = datetime.now()
date2 = date1 + timedelta(days=4)
print("Ngày sau 4 ngày:", date2)
date3 = date1 - timedelta(days=15)
print("Ngày trước 15 ngày:", date3)
Kết quả:
Ngày sau 4 ngày: 2023-04-24 18:05:39.509905
Ngày trước 15 ngày: 2023-04-05 18:05:39.509905
Thuộc tính lớp của timedelta
Các đối tượng timedelta
trong Python có các thuộc tính lớp quan trọng như sau:
- timedelta.min − Đối tượng timedelta âm nhất,
timedelta(-999999999)
. - timedelta.max − Đối tượng timedelta dương nhất,
timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
. - timedelta.resolution − Sự khác biệt nhỏ nhất có thể có giữa các đối tượng timedelta không bằng nhau,
timedelta(microseconds=1)
.
Ví dụ:
from datetime import timedelta
print("Minimum timedelta:", timedelta.min)
print("Maximum timedelta:", timedelta.max)
print("Resolution:", timedelta.resolution)
Kết quả:
Minimum timedelta: -999999999 days, 0:00:00
Maximum timedelta: 999999999 days, 23:59:59.999999
Resolution: 0:00:00.000001
Thuộc tính của timedelta
Vì chỉ có ngày, giây và microsecond được lưu trữ nội bộ, nên đó là các thuộc tính duy nhất của đối tượng timedelta.
- days − Giữa -999999999 và 999999999 bao gồm.
- seconds − Giữa 0 và 86399 bao gồm.
- microseconds − Giữa 0 và 999999 bao gồm.
Phương thức của timedelta
timedelta.total_seconds() − Trả về tổng số giây có trong khoảng thời gian.
Ví dụ:
from datetime import timedelta
year = timedelta(days=365)
years = 5 * year
print(years)
print(years.days // 365) # Số năm tương đương
Kết quả:
1825 days, 0:00:00
5
Vietnix – Nhà cung cấp dịch vụ lưu trữ đáng tin cậy với tốc độ và bảo mật vượt trội
Vietnix hiện là một trong những nhà cung cấp hàng đầu tại Việt Nam về dịch vụ cho thuê máy chủ (server), hosting, VPS và tên miền (domain). Với mục tiêu mang đến giải pháp lưu trữ tối ưu và bảo mật cao, Vietnix cam kết cung cấp dịch vụ chất lượng vượt trội và đội ngũ hỗ trợ kỹ thuật chuyên nghiệp 24/7. Hơn 80.000 khách hàng đã lựa chọn Vietnix nhờ vào dịch vụ cho thuê máy chủ đáng tin cậy, giúp tối ưu hóa hiệu suất và bảo mật dữ liệu cho các doanh nghiệp.
Thông tin liên hệ:
- Website: https://vietnix.vn/
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, TP. Hồ Chí Minh.
Câu hỏi thường gặp
Làm thế nào để sử dụng đối tượng timedelta
trong Python để thực hiện phép toán với thời gian?
Bạn có thể sử dụng đối tượng timedelta
để cộng hoặc trừ với các đối tượng datetime
, giúp thay đổi ngày, giờ, phút, giây. Ví dụ, cộng một ngày vào một đối tượng datetime
bằng cách sử dụng datetime + timedelta(days=1)
.
Có thể chuyển một chuỗi thời gian thành datetime
mà không có thông tin về múi giờ không?
Có, khi tạo đối tượng datetime
từ chuỗi, bạn có thể chọn không bao gồm thông tin múi giờ, điều này sẽ tạo ra đối tượng naive datetime
không có tzinfo
.
Datetime có thể được sử dụng để tính toán ngày trong tuần không?
Có, bạn có thể sử dụng phương thức weekday()
để trả về ngày trong tuần dưới dạng số nguyên (0 cho thứ Hai, 6 cho Chủ Nhật). Phương thức isoweekday()
trả về ngày trong tuần từ 1 đến 7.
Phương thức strftime()
trong Python có thể làm gì?
Phương thức strftime()
cho phép bạn chuyển đổi đối tượng datetime
thành chuỗi theo định dạng mà bạn chỉ định, ví dụ: “dd/mm/yyyy”, “YYYY-MM-DD”.
Lời kết
Với những kiến thức cơ bản về module datetime, bạn đã sẵn sàng để áp dụng vào các dự án của mình. Hy vọng bài viết đã mang lại cho bạn cái nhìn sâu sắc hơn về cách làm việc với thời gian trong Python. Nếu có bất kỳ câu hỏi nào, đừng ngần ngại để lại bình luận bên dưới, mình sẽ hỗ trợ nhanh chóng! Cảm ơn bạn đã đọc!