Thư viện chuẩn datetime của Python có thể được sử dụng để xử lý ngày và giờ (date, time and time). Các phương thức strftime () và strptime (), chuyển đổi ngày và giờ thành và từ các chuỗi, có thể được sử dụng để thao tác ngày và giờ ở nhiều định dạng khác nhau.
Nó cũng có thể thực hiện các hoạt động như trừ và cộng. Ví dụ: bạn có thể dễ dàng tính toán và lấy ngày cách đây 10 ngày hoặc 3 tuần kể từ bây giờ hoặc thời gian 50 phút kể từ bây giờ.
Đầu tiên, chúng tôi sẽ mô tả các lớp đối tượng sau đây có sẵn trong mô-đun datetime.
datetime.datetime
:Ngày và giờ (ngày và giờ)datetime.date
:Ngàydatetime.time
:Thời giandatetime.timedelta
:Chênh lệch múi giờ và thời gian đã trôi qua
Các phương thức strftime () và strptime (), chuyển đổi ngày / giờ và chuỗi cho nhau, cũng được giải thích.
datetime
sự vậtdatetime.now()
:Ngày hôm nay, giờ hiện tạidatetime
Trình tạo đối tượng- Chuyển đổi đối tượng datetime thành đối tượng date
date
sự vậtdate.today()
:Ngày hôm nay- Hàm tạo cho đối tượng ngày tháng
time
sự vật- Hàm tạo cho đối tượng thời gian
timedelta
sự vật- Trừ các đối tượng datetime và date để tạo các đối tượng hẹn giờ.
- Hàm tạo cho đối tượng hẹn giờ
- Phép trừ và phép cộng bằng cách sử dụng các đối tượng đồng thời
strftime()
:Chuyển đổi từ ngày và giờ thành chuỗistrptime()
:Chuyển đổi từ chuỗi thành ngày và giờ
Cũng được bao gồm trong thư viện tiêu chuẩn là mô-đun lịch, mô-đun này tạo lịch ở định dạng văn bản thuần túy hoặc HTML.
đối tượng datetime
Đối tượng datetime là đối tượng có cả thông tin ngày (năm, tháng, ngày) và thời gian (giờ, phút, giây, micro giây). Bạn có thể truy cập những thông tin đó bằng các thuộc tính sau.
year
month
day
hour
minute
second
microsecond
datetime.now():Ngày hôm nay, giờ hiện tại
datetime.now () sẽ cung cấp cho bạn một đối tượng datetime với ngày hôm nay (ngày hiện tại) và thời gian hiện tại.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
Hàm tạo cho đối tượng datetime
Cũng có thể tạo các đối tượng datetime cho các ngày và giờ tùy ý.
Hàm tạo cho đối tượng datetime như sau.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Các giá trị sau là bắt buộc và các giá trị khác có thể được bỏ qua. Nếu bị bỏ qua, giá trị mặc định là 0.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
Chuyển đổi đối tượng datetime thành đối tượng date
Một đối tượng datetime có thể được chuyển đổi thành một đối tượng date bằng phương thức date (), như được mô tả tiếp theo.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
đối tượng ngày tháng
Đối tượng date là đối tượng chứa thông tin về ngày (năm, tháng, ngày). Nó có thể được truy cập theo các thuộc tính năm, tháng và ngày.
date.today():Ngày hôm nay
Đối tượng date của ngày hiện tại (ngày hôm nay) có thể được lấy bằng date.today ().
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Hàm tạo cho đối tượng ngày tháng
Hàm tạo cho đối tượng ngày tháng như sau
date(year, month, day)
Tất cả đều bắt buộc phải có và không thể bỏ sót.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
đối tượng thời gian
Đối tượng thời gian là đối tượng chứa thông tin về thời gian (giờ, phút, giây và micro giây). Nó có thể được truy cập bằng các thuộc tính giờ, phút, giây và micro giây.
Hàm tạo cho đối tượng thời gian
Hàm tạo của đối tượng thời gian như sau.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Tất cả chúng đều là tùy chọn và nếu chúng bị bỏ qua, chúng sẽ được đặt thành 0.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
đối tượng hẹn giờ
Đối tượng hẹn giờ là đối tượng biểu thị sự chênh lệch thời gian giữa hai ngày và giờ, hoặc thời gian đã trôi qua. Nó có thông tin theo ngày, giây và micro giây và có thể được truy cập bằng các thuộc tính ngày, giây và micro giây. Cũng có thể lấy tổng số giây bằng phương thức total_seconds ().
Trừ các đối tượng datetime và date để tạo đối tượng hẹn giờ.
Trừ các đối tượng datetime cho nhau tạo ra một đối tượng hẹn giờ.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
Tương tự, phép trừ các đối tượng ngày tháng cho nhau tạo ra một đối tượng thời gian.
Hàm tạo cho đối tượng hẹn giờ
Hàm tạo của đối tượng hẹn giờ như sau
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Tất cả chúng đều là tùy chọn và nếu chúng bị bỏ qua, chúng sẽ được đặt thành 0.
Lưu ý rằng đối tượng hẹn giờ chỉ chứa thông tin sau.
- một số ngày:
days
- số giây:
seconds
- đếm micro giây:
microseconds
Ví dụ, hai cái sau bằng nhau
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Phép trừ và phép cộng bằng cách sử dụng các đối tượng đồng thời
Đối tượng thời gian có thể được sử dụng với các đối tượng ngày giờ và ngày tháng để thực hiện các phép toán như trừ và cộng. Ví dụ: bạn có thể dễ dàng tính toán và lấy ngày một tuần trước hoặc 10 ngày kể từ bây giờ hoặc thời gian 50 phút kể từ bây giờ.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
Nó cũng có thể được sử dụng để tính toán số ngày cho đến một ngày cụ thể.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Chuyển đổi từ ngày và giờ thành chuỗi
Phương thức strftime () của các đối tượng datetime và date có thể được sử dụng để chuyển đổi thông tin ngày và giờ (ngày và giờ) thành một chuỗi ở bất kỳ định dạng định dạng nào.
mã định dạng
Xem tài liệu chính thức bên dưới để biết các mã định dạng có sẵn.
Các mã định dạng chính được liệt kê bên dưới.
%d
:Ngày trong tháng ở dạng ký hiệu thập phân với số không được điền.%m
:Tháng trong ký hiệu thập phân với số không được điền.%y
:Hai chữ số cuối cùng của năm dưới dạng ký hiệu thập phân không điền.%Y
:Bốn chữ số của năm trong ký hiệu thập phân với số không được điền.%H
:Khi được biểu thị bằng ký hiệu thập phân với số không được điền (ký hiệu 24 giờ)%I
:Khi được biểu thị bằng ký hiệu thập phân với số không được điền (ký hiệu 12 giờ)%M
:Đối với ký hiệu thập phân với số không được điền.%S
:Giây trong ký hiệu thập phân với số không được điền.%f
:Microseconds (6 chữ số) trong ký hiệu thập phân với số 0 được điền.%A
:Tên ngày trong tuần cho ngôn ngữ%a
:Tên của ngày cho ngôn ngữ (dạng viết tắt)%B
:Tên tháng theo ngôn ngữ địa phương%b
:Tên tháng theo ngôn ngữ địa phương (dạng viết tắt)%j
:Ngày trong năm ở dạng ký hiệu thập phân không điền.%U
:Số tuần của năm ở dạng ký hiệu thập phân với số không điền (tuần bắt đầu vào Chủ nhật)%W
:Số tuần của năm ở dạng ký hiệu thập phân không điền (tuần bắt đầu vào Thứ Hai)
Các mã định dạng sau cho tên ngày và tháng có thể được lấy ở các chuỗi khác nhau tùy thuộc vào ngôn ngữ.
%A
%a
%B
%b
Ngoài ra còn có một phương pháp dành riêng cho các chuỗi định dạng ISO 8601.
Mã mẫu
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
Nếu bạn muốn nhận một số thay vì một chuỗi, chỉ cần chuyển nó thành một số nguyên với int ().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Kết hợp với đối tượng hẹn giờ, có thể dễ dàng tạo, chẳng hạn như danh sách các ngày hai tuần ở bất kỳ định dạng nào.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
Sử dụng ký hiệu đọc hiểu danh sách thông minh hơn.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- Những bài viết liên quan:Sử dụng ký hiệu hiểu danh sách Python
strptime():Chuyển đổi từ chuỗi thành ngày và giờ
datetime strptime () có thể được sử dụng để tạo một đối tượng datetime từ một chuỗi ngày hoặc giờ. Cần xác định chuỗi định dạng tương ứng với chuỗi gốc.
Ngoài ra còn có một phương pháp dành riêng cho chuỗi ISO 8601 (Python 3.7 trở lên).
Mã mẫu
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
Bằng cách sử dụng phương thức strftime () trên đối tượng datetime được truy xuất, bạn có thể biểu diễn ngày và giờ ở định dạng khác với chuỗi ban đầu.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Nếu bạn chuyển đổi nó thành một đối tượng datetime, bạn cũng có thể thực hiện các thao tác với các đối tượng hẹn giờ, vì vậy, ví dụ: bạn có thể tạo một chuỗi ngày 10 ngày trước ở cùng một định dạng.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22