Chuyển đổi ngày và giờ thành và từ chuỗi trong Python datetime (strftime, strptime)

Kinh doanh

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ày
  • datetime.time:Thời gian
  • datetime.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.

  • datetimesự vật
    • datetime.now():Ngày hôm nay, giờ hiện tại
    • datetimeTrình tạo đối tượng
    • Chuyển đổi đối tượng datetime thành đối tượng date
  • datesự vật
    • date.today():Ngày hôm nay
    • Hàm tạo cho đối tượng ngày tháng
  • timesự vật
    • Hàm tạo cho đối tượng thời gian
  • timedeltasự 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ỗi
  • strptime():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']

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
Copied title and URL