Tôi đang cố gắng viết một kịch bản đồng hồ đếm ngược. Tôi muốn sử dụng một ngày đã định trong tương lai và đếm ngược ở định dạng dễ đọc. Giờ, phút, giây. Tôi muốn in ra màn hình LCD 16x2. Vấn đề tôi gặp phải là cố gắng chuyển đổi đầu ra của sự khác biệt giữa các ngày thành một định dạng đẹp. Tôi đã đính kèm những gì tôi có cho đến nay. Tôi nhận được lỗi:
AttributionError: đối tượng 'datetime.timedelta' không có thuộc tính 'strftime'
Đây là mã của tôi:
từ ngày giờ nhập ngày giờ
từ thời gian nhập strftime
triển khai = datetime(2015, 3, 21, 0, 0)
mydate = datetime.now()-triển khai
in (mydate.strftime("%b %d %H:%M:%S"))
Tôi biết cách in ra màn hình LCD và tạo vòng lặp, chỉ cần trợ giúp về phần này.
Có hai câu hỏi:
- Nếu bạn sử dụng giờ địa phương được biểu thị dưới dạng đối tượng ngày giờ thô, chênh lệch thời gian có thể không chính xác nếu giờ địa phương tương ứng có độ lệch UTC khác, ví dụ: xung quanh chuyển đổi DST.
- Sự khác biệt là
đồng bằng thời gian
Đối tượng không tồn tại strftime()
phương pháp
Để khắc phục nó,convert triển khai
từ múi giờ địa phương đến UTC :
#!/usr/bin/env trăn
import time
từ datetime nhập datetime, timedelta
triển khai = datetime(2015, 3, 21, 0, 0) # giả sử giờ địa phương
timestamp = time.mktime(deploy.timetuple()) # có thể bị lỗi, xem liên kết bên dưới
triển khai_utc = datetime.utcfromtimestamp(dấu thời gian)
đã trôi qua = triển khai_utc - datetime.utcnow() # `triển khai` là trong tương lai
其中 trôi qua
là thời gian đã trôi qua, không bao gồm giây nhuận (ví dụ: 2015-07-01 00:59:60 BST+0100
).
có liên quan time.mktime()
Để biết thêm chi tiết về thời điểm điều này có thể thất bại, hãy xem Tìm xem 24 giờ đã trôi qua giữa các thời điểm hay chưa - Python .
ĐẾN đồng bằng thời gian
Để chuyển đổi thành một chuỗi bạn có thể sử dụng str()
函数:
print(đã trôi qua) # in toàn bộ timedelta
# xóa micro giây
trunc_micros = timedelta(ngày=elapsed.days, giây=elapsed.seconds)
print(trunc_micros) # -> 20 ngày, 13:44:14 <- 17 ký tự
#bỏ dấu phẩy
print(str(trunc_micros).replace(',', ''))
# -> 20 ngày 13:44:14 <- 16 ký tự
Nếu bạn muốn một định dạng khác thì hãy sử dụng divmod()
Chức năng chuyển đổi sang giờ, phút, giây:
giây = elapsed.days*86400 + elapsed.seconds # giảm micro giây
phút, giây = divmod(giây, 60)
giờ, phút = divmod(phút, 60)
print("{hours:02d}:{phút:02d}:{seconds:02d}".format(**vars()))
# -> 493:44:14
Tôi là một lập trình viên xuất sắc, rất giỏi!