PHP
Python

Trang chủ

Hướng dẫn làm việc với datetime trong Python: Từ cơ bản đến nâng cao

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
19/03/2025
33 phút đọc
Theo dõi Vietnix trên

Hướng dẫn làm việc với datetime trong Python: Từ cơ bản đến nâng cao

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
Datetime trong Python
Datetime trong Python

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ểm
  • datetime.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ụcTrườngGiá trị
0Năm (tm_year)4 chữ số (VD: 2025)
1Tháng (tm_mon)1 – 12
2Ngày (tm_mday)1 – 31
3Giờ (tm_hour)0 – 23
4Phút (tm_min)0 – 59
5Giây (tm_sec)0 – 61 (có giây nhuận)
6Ngày trong tuần (tm_wday)0 (Thứ Hai) – 6 (Chủ Nhật)
7Ngày trong năm (tm_yday)1 – 366
8Giờ mùa hè (tm_isdst)-1, 0, 1 (-1 để tự động xác định)
Cấu trúc của TimeTuple

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 2025
  • tm_mon=3: Tháng 3
  • tm_mday=19: Ngày 19
  • tm_hour=14: Giờ 14 (2 giờ chiều)
  • tm_min=30: Phút 30
  • tm_sec=45: Giây 45
  • tm_wday=2: Thứ Tư (vì 0 là Thứ Hai)
  • tm_yday=78: Ngày thứ 78 trong năm
  • tm_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:

FunctionMô 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.
Module time trong Python

Có hai thuộc tính quan trọng có sẵn với mô-đun thời gian.

AttributeMô 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.tznameCặ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.
Thuộc tính quan trọng có sẵn khác

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:

FunctionMô 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).
Các function trong module calendar

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 khi timedatetime 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 đến MAXYEAR.
  • month: Từ 1 đến 12.
  • 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ới date(1, 1, 1).
  • date.max – Ngày lớn nhất có thể đại diện, tương ứng với date(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 đến MAXYEAR).
  • date.month – Lấy giá trị tháng (từ 1 đến 12).
  • 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ới d.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 tzinfoNone, đố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ượng time, hoặc None 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ới t.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 tzinfoNone, trả về None, ngược lại trả về self.tzinfo.utcoffset(None).
      • dst(): Nếu tzinfoNone, trả về None, ngược lại trả về self.tzinfo.dst(None).
      • tzname(): Nếu tzinfoNone, 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, monthday 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 đến MAXYEAR.
      • 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ảng 0 đến 23.
      • datetime.minute: Phút, nằm trong khoảng 0 đến 59.
      • datetime.second: Giây, nằm trong khoảng 0 đến 59.
      • datetime.microsecond: Microsecond, nằm trong khoảng 0 đế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ặc 1, 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 tin tzinfo.
      • now(tz=None): Trả về ngày giờ hiện tại, có thể truyền tz để 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 tin tzinfo.
      • utcfromtimestamp(timestamp): Trả về datetime UTC từ timestamp POSIX, không có tzinfo.
      • fromtimestamp(timestamp, timezone.utc): Tạo datetime từ timestamp POSIX, tương đương datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp).
      • fromordinal(ordinal): Chuyển đổi ordinal (số nguyên Gregorian) thành datetime. Ngày 1/1 năm 1 có ordinal là 1.
      • fromisoformat(date_string): Tạo datetime 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ởi time.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ới d.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:

      • millisecondsmicroseconds (1 ms = 1000 µs).
      • minutesseconds (1 phút = 60 giây).
      • hoursseconds (1 giờ = 3600 giây).
      • weeksdays (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, VPStê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?

      , 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?

      , 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!

      Cao Lê Viết Tiến

      PHP Leader
      tại
      Vietnix

      Kết nối với mình qua

      Icon Quote
      Icon Quote

      Học lập trình online cùng vietnix

      Học lập trình online cùng Vietnix

      PHPXem thêmThu gọn