Đối với người dùng Windows như tôi, lớp ZoneInfo có thể không hoạt động. Nhập nội dung nào đó như tz
7 sẽ trả về “ZoneInfoNotFoundError”
Theo Python,
Một số hệ thống, đặc biệt là các hệ thống Windows, không có sẵn cơ sở dữ liệu IANA, do đó, đối với các dự án hướng đến khả năng tương thích đa nền tảng yêu cầu dữ liệu múi giờ, bạn nên khai báo một phụ thuộc vào tzdata
Giải pháp là sử dụng pip để cài đặt 'tzdata' trước khi làm việc với lớp ZoneInfo
jamesbrown68 trên
Đăng, xin lỗi. Tôi đã đưa ra nhận xét của mình trước khi thấy bạn xử lý cơ sở dữ liệu IANA bị thiếu trong video của mình. Lấy làm tiếc
raulfz trên
Tôi đã thử xem có gì trong zoneinfo. available_timezones[] và tôi gặp lỗi khi thông báo 'zoneinfo' không được xác định. Tuy nhiên, tôi đã nhập nó. Ai đó có thể chỉ cho tôi vấn đề là gì không?
Bartosz Zaczyński Nhóm RP trên
@raulfz Bạn có chắc là mình đang chạy Python 3 không. 9? . Bạn có phiền khi chia sẻ nó không?
raulfz trên
Xin chào, cảm ơn rất nhiều vì phản hồi của bạn. Tôi không nhận ra rằng mình vừa nhập chức năng TimeZone chứ không phải toàn bộ mô-đun múi giờ, đó là vấn đề
Tôi đã làm theo mã video chính xác như được hiển thị
from zoneinfo import TimeZone
thay vì viết
import zoneinfo
Tôi có thể đã nhận ra điều gì khi gọi điện cho tz
8 Cảm ơn bạn đã dành thời gian trả lời câu hỏi của tôi
Tốt nhất, R
Christopher Trudeau Nhóm RP trên
Xin chào @raulfz,
Bạn đúng. Có vẻ như tôi đã bỏ lỡ một dòng khi tôi sao chép nó vào bản trình bày. Tôi sẽ vá nó để tránh nhầm lẫn trong tương lai. Xin lỗi vì điều đó
raulfz trên
Không có vấn đề gì cả, thực ra tôi nên suy luận nó bằng cách lưu ý rằng bạn đang gọi phương thức trên đối tượng zoneinfo chứ không phải trên ZoneInfo. Dù sao, cảm ơn bạn đã dành thời gian
Làm việc với ngày và giờ có thể phức tạp, đặc biệt là khi xử lý chuyển đổi múi giờ. Hướng dẫn này sẽ cung cấp tổng quan về mô-đun ngày giờ của Python, nhấn mạnh vào các chức năng liên quan đến múi giờ
sở thích
Được đăng trong những sở thích này
Đặt mua
con trăn
h/python • 67 hướng dẫn
1
Đầu tiên, nếu bạn đã thấy datetime được sử dụng trong Python, bạn sẽ nhận thấy rằng nó vừa là tên của mô-đun vừa là một trong nhiều lớp bên trong mô-đun. Vì vậy, mô-đun datetime có thể được nhập như thế này
import datetime
# datetime.datetime
# datetime.timedelta
# datetime.timezone [python 3.2+]
Hoặc bạn có thể chỉ cần nhập các lớp ngày giờ mà bạn quan tâm
from datetime import datetime, timedelta
Một đối tượng datetime là một thể hiện của datetime. lớp datetime đại diện cho một thời điểm duy nhất. Nếu bạn đã quen thuộc với lập trình hướng đối tượng, một đối tượng datetime được tạo bằng cách khởi tạo lớp datetime với một ngày tháng
Một cách dễ dàng để lấy đối tượng datetime là sử dụng datetime. Hiện nay
import datetime
datetime.datetime.now[]
> datetime.datetime[2016, 11, 15, 9, 59, 25, 608206]
Như bạn có thể thấy, phương thức now trả về một đối tượng datetime đại diện cho thời điểm mà now được gọi
Bạn cũng có thể tạo một đối tượng ngày giờ bằng cách chỉ định ngày bạn muốn biểu thị. Tối thiểu, việc khởi tạo ngày giờ yêu cầu ít nhất 3 đối số - năm, tháng và ngày
Hãy khởi tạo ngày sinh nhật của tôi
import datetime
datetime.datetime[1985, 10, 20]
> datetime.datetime[1985, 10, 20, 0, 0]
Từ đây, chúng ta sẽ nói về thao tác, định dạng và thực hiện chuyển đổi múi giờ trên các đối tượng ngày giờ
2
Theo tài liệu, "trọng tâm của việc triển khai [của thư viện datetime] là trích xuất thuộc tính hiệu quả để định dạng và thao tác đầu ra". Vì vậy, chúng tôi sẽ thảo luận về việc trích xuất các thuộc tính và định dạng ngày tháng
Đối với ví dụ này, chúng tôi sẽ chọn một ngày ngẫu nhiên
import datetime
d = datetime.datetime[1984, 1, 10, 23, 30]
Có nhiều trường hợp chúng ta muốn định dạng một đối tượng ngày giờ theo một cách cụ thể. Đối với điều này, phương pháp strftime rất tiện dụng. Phương pháp này cho phép bạn in một chuỗi được định dạng bằng một loạt các lệnh định dạng. Điều này được hiểu rõ nhất với các ví dụ
d.strftime["%B %d, %Y"]
> 'January 10, 1984'
d.strftime["%Y/%m/%d"]
> '1984/01/10'
d.strftime["%d %b %y"]
> '10 Jan 84'
d.strftime["%Y-%m-%d %H:%M:%S"]
> '1984-01-10 23:30:00'
Như bạn hy vọng có thể nói, cùng một đối tượng ngày giờ được sử dụng để tạo từng định dạng ngày. Định dạng được chỉ định bằng cách sử dụng các chỉ thị định dạng khác nhau. Ví dụ: %Y tương ứng với năm có đủ bốn chữ số, trong khi %m tương ứng với số thập phân có hai chữ số biểu thị tháng. Xem danh sách đầy đủ các chỉ thị định dạng
Cũng có thể truy cập trực tiếp các thuộc tính khác nhau của đối tượng datetime
________số 8_______Khi thảo luận về định dạng, bạn nên làm quen với ISO 8601, đây là một tiêu chuẩn quốc tế để trình bày ngày và giờ. Python có một phương pháp để nhanh chóng tạo ngày/giờ được định dạng theo tiêu chuẩn ISO 8601
d.isoformat[]
> '1984-01-10T23:30:00'
Bây giờ chúng ta sẽ thảo luận về mặt trái của strftime, đó là strptime. Đây là nơi bạn tạo một đối tượng ngày giờ từ một chuỗi. Nhưng vì chuỗi có thể được định dạng theo bất kỳ cách nào, nên cần phải cho datetime biết định dạng mong đợi. Sử dụng cùng một bộ chỉ thị định dạng, chúng ta có thể chuyển vào một chuỗi và định dạng dự kiến để tạo một đối tượng ngày giờ
import datetime
datetime.datetime.strptime["December 25, 2010", "%B %d, %Y"]
> datetime.datetime[2010, 12, 25, 0, 0]
Lưu ý cách mẫu khớp chính xác với chuỗi. Nếu bạn sử dụng một chỉ thị định dạng hoặc ngày không hợp lý, nó sẽ đưa ra một ngoại lệ
3
Cho đến nay, việc khởi tạo và định dạng các đối tượng ngày giờ khá dễ dàng. Tuy nhiên, múi giờ thêm một chút phức tạp vào phương trình
ngây thơ vs nhận thức
Cho đến nay chúng ta chỉ xử lý các đối tượng datetime ngây thơ. Điều đó có nghĩa là đối tượng ngây thơ với bất kỳ loại múi giờ nào. Vì vậy, một đối tượng datetime có thể được bù ngây thơ hoặc nhận biết bù
Độ lệch của múi giờ đề cập đến số giờ múi giờ tính từ Giờ phối hợp quốc tế [UTC]
Một đối tượng datetime ngây thơ không chứa thông tin múi giờ. Cách dễ nhất để biết một đối tượng datetime có ngây thơ hay không là kiểm tra tzinfo. tzinfo sẽ được đặt thành Không có đối tượng nào ngây thơ
import datetime
naive = datetime.datetime.now[]
naive.tzinfo
> None
Để nhận biết đối tượng datetime, bạn có thể sử dụng thư viện pytz. Trước tiên, bạn phải khởi tạo một đối tượng múi giờ, sau đó sử dụng đối tượng múi giờ đó để "bản địa hóa" một đối tượng ngày giờ. Bản địa hóa chỉ đơn giản là cung cấp thông tin múi giờ của đối tượng
from datetime import datetime, timedelta
0Một đối tượng datetime ngây thơ bị giới hạn ở chỗ nó không thể định vị chính nó trong mối quan hệ với các đối tượng datetime đã biết. Ví dụ
from datetime import datetime, timedelta
1Khi xử lý các đối tượng datetime, tôi đã bắt gặp hai lời khuyên mà tôi thường đồng ý. Đầu tiên, luôn luôn sử dụng các đối tượng datetime "nhận biết". Và thứ hai, luôn làm việc ở UTC và thực hiện chuyển đổi múi giờ là bước cuối cùng
Cụ thể hơn, như được chỉ ra bởi người dùng jarhwah trên reddit, bạn nên lưu trữ thời gian ở dạng UTC và chuyển đổi trên màn hình
Khi bạn đã quen thuộc với các đối tượng ngày giờ nhận biết, việc chuyển đổi múi giờ tương đối dễ dàng. Hãy tạo một đối tượng ngày giờ với múi giờ UTC và chuyển đổi nó thành Tiêu chuẩn Thái Bình Dương
from datetime import datetime, timedelta
2Vì vậy, pst_now và utc_now là các đối tượng ngày giờ khác nhau với các múi giờ khác nhau, nhưng chúng bằng nhau. Để chắc chắn, chúng ta có thể in thời gian của mỗi
from datetime import datetime, timedelta
34
Thường thì chúng ta sẽ làm việc với nhiều đối tượng ngày giờ và chúng ta sẽ muốn so sánh chúng. Lớp timedelta rất hữu ích để tìm sự khác biệt giữa hai ngày hoặc thời gian. Trong khi các đối tượng datetime biểu thị một thời điểm, thì các đối tượng timedelta biểu thị một khoảng thời gian, như 5 ngày hoặc 10 giây
Giả sử tôi muốn biết chính xác tôi hơn anh trai bao nhiêu tuổi. Tôi sẽ tạo đối tượng datetime cho mỗi chúng ta đại diện cho ngày và giờ sinh của chúng ta
from datetime import datetime, timedelta
4Vì chúng tôi muốn làm việc với các đối tượng nhận biết bù trừ, chúng tôi sẽ thêm thông tin múi giờ
from datetime import datetime, timedelta
5Để xem tôi lớn hơn anh trai tôi bao nhiêu tuổi, chúng ta chỉ cần trừ hai đối tượng ngày giờ. Và để xem câu trả lời theo cách mà con người có thể đọc được, chúng ta có thể in ra sự khác biệt một cách đơn giản
from datetime import datetime, timedelta
6Biến diff thực sự là một đối tượng timedelta trông giống như datetime này. múi giờ[2440, 2100]
Trừ một đối tượng datetime khỏi một đối tượng khác sẽ tạo ra một đối tượng timedelta, vì vậy, như bạn có thể nghi ngờ, trừ một đối tượng timedelta khỏi một đối tượng datetime sẽ tạo ra một đối tượng datetime
from datetime import datetime, timedelta
7Tất nhiên điều này cũng đúng với phép cộng
Điều này hữu ích để trả lời các câu hỏi như "3 tuần trước kể từ ngày hôm qua là ngày nào?"
Để trả lời câu hỏi thứ hai, chúng ta cần có hai thứ - thứ nhất, đối tượng datetime đại diện cho ngày hôm nay và thứ hai, đối tượng timedelta đại diện cho 90 ngày
from datetime import datetime, timedelta
8Sau đó, chúng ta có thể chỉ cần làm phép tính
from datetime import datetime, timedelta
9Và vì chúng tôi muốn biết ngày trong tuần, chúng tôi có thể sử dụng strftime
import datetime
datetime.datetime.now[]
> datetime.datetime[2016, 11, 15, 9, 59, 25, 608206]
05
Ngày và giờ có thể phức tạp, nhưng lớp datetime của Python sẽ giúp mọi thứ dễ dàng hơn một chút. Hy vọng rằng bạn tìm thấy hướng dẫn này là hữu ích. Nếu bạn nghĩ rằng có bất kỳ ví dụ hoặc chủ đề cơ bản nào khác liên quan đến các đối tượng ngày giờ và múi giờ, vui lòng bình luận bên dưới và tôi sẽ cố gắng thêm chúng vào hướng dẫn
Chia sẻ
FacebookRedditTwitterPinterestEmailText message
Yêu thích
TIẾP THEO
Cách sử dụng Blender để tạo mô hình 3D
Tìm hiểu các ABC của XYZ
Ngày 24 tháng 6 năm 2022
0Blender là một công cụ nguồn mở tuyệt vời dành cho các nhà sản xuất, họa sĩ hoạt hình, nghệ sĩ và những người khác muốn mở rộng khả năng sáng tạo của họ với thế giới mô hình 3d