Làm việc với ngày và giờ là một trong những thách thức lớn nhất trong lập trình. Giữa việc xử lý các múi giờ, thời gian tiết kiệm ánh sáng ban ngày và các định dạng ngày được viết khác nhau, có thể khó theo dõi ngày và giờ bạn đang tham chiếu. May mắn thay, mô-đun
Cách in hoặc đọc ngày và giờ ở một định dạng cụ thể
Cách làm số học với ngày tháng và thời gian
Ngoài ra, bạn sẽ phát triển một ứng dụng gọn gàng để đếm ngược thời gian còn lại cho đến PyCon US tiếp theo
Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python miễn phí của chúng tôi, trang này cho bạn biết kiến thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python
Bắt đầu nào
Lập trình với ngày và giờ
Nếu bạn đã từng làm việc trên phần mềm cần theo dõi thời gian trên một số khu vực địa lý, thì bạn có thể hiểu tại sao việc lập trình theo thời gian lại khó khăn đến vậy. Sự mất kết nối cơ bản là các chương trình máy tính thích các sự kiện được sắp xếp hoàn hảo và đều đặn, nhưng cách mà hầu hết con người sử dụng và đề cập đến thời gian lại rất bất thường.
Ghi chú. Nếu bạn muốn tìm hiểu thêm về lý do tại sao việc xử lý thời gian lại phức tạp đến vậy, thì có rất nhiều tài nguyên tuyệt vời có sẵn trên web. Dưới đây là một vài nơi tốt để bắt đầu
Yêu máy tính. Vấn đề với thời gian và múi giờ
Làm việc với múi giờ. Mọi thứ bạn ước bạn không cần biết
Sự phức tạp của lập trình dữ liệu thời gian
Một ví dụ tuyệt vời về sự bất thường này là thời gian tiết kiệm ánh sáng ban ngày. Tại Hoa Kỳ và Canada, đồng hồ được đặt nhanh hơn một giờ vào Chủ nhật thứ hai của tháng 3 và lùi lại một giờ vào Chủ nhật đầu tiên của tháng 11. Tuy nhiên, điều này chỉ xảy ra từ năm 2007. Trước năm 2007, đồng hồ được điều chỉnh chuyển tiếp vào Chủ nhật đầu tiên của tháng 4 và lùi vào Chủ nhật cuối cùng của tháng 10
Mọi thứ thậm chí còn phức tạp hơn khi bạn xem xét các múi giờ. Lý tưởng nhất là ranh giới múi giờ sẽ theo chính xác các đường kinh tuyến. Tuy nhiên, vì lý do lịch sử và chính trị, múi giờ hiếm khi thẳng. Thông thường, các khu vực cách nhau một khoảng cách lớn sẽ có cùng múi giờ và các khu vực liền kề có múi giờ khác nhau. Có một số múi giờ ngoài kia với hình dạng khá ngộ nghĩnh
Loại bỏ các quảng cáo
Cách máy tính đếm thời gian
Gần như tất cả các máy tính đều tính thời gian ngay lập tức được gọi là kỷ nguyên Unix. Điều này xảy ra vào ngày 1 tháng 1 năm 1970, lúc 00. 00. 00 UTC. UTC là viết tắt của Giờ phối hợp quốc tế và đề cập đến thời gian ở kinh độ 0°. UTC thường còn được gọi là Giờ trung bình Greenwich hoặc GMT. UTC không được điều chỉnh theo giờ mùa hè, do đó, nó luôn duy trì 24 giờ mỗi ngày
Theo định nghĩa, thời gian Unix trôi qua với cùng tốc độ với UTC, do đó, bước một giây trong UTC tương ứng với bước một giây trong thời gian Unix. Bạn thường có thể tìm ra ngày và giờ theo UTC của bất kỳ thời điểm cụ thể nào kể từ ngày 1 tháng 1 năm 1970, bằng cách đếm số giây kể từ kỷ nguyên Unix, ngoại trừ giây nhuận. Giây nhuận đôi khi được thêm vào UTC để giải thích cho sự quay chậm của Trái đất nhưng không được thêm vào thời gian Unix
Ghi chú. Có một lỗi thú vị liên quan đến thời gian Unix. Vì nhiều hệ điều hành cũ hơn là 32-bit nên chúng lưu trữ thời gian Unix trong một số nguyên có chữ ký 32-bit
Điều này có nghĩa là tại 03. 14. 07 vào ngày 19 tháng 1 năm 2038, số nguyên sẽ tràn, dẫn đến sự cố được gọi là sự cố Năm 2038 hoặc Y2038. Tương tự như sự cố Y2K, Y2038 sẽ cần được khắc phục để tránh hậu quả thảm khốc cho các hệ thống quan trọng
Gần như tất cả các ngôn ngữ lập trình, kể cả Python, đều kết hợp khái niệm thời gian Unix. Thư viện chuẩn của Python bao gồm một mô-đun có tên là
9 và thực thi để in thời gian Unix hoặc số giây (không bao gồm giây nhuận) kể từ kỷ nguyên
Ngoài thời gian Unix, máy tính cần một cách để truyền thông tin về thời gian cho người dùng. Như bạn đã thấy trong ví dụ trước, con người gần như không thể phân tích thời gian Unix. Thay vào đó, thời gian Unix thường được chuyển đổi thành UTC, sau đó có thể được chuyển đổi thành giờ địa phương bằng cách sử dụng hiệu số múi giờ
Cơ quan cấp số được gán trên Internet (IANA) duy trì cơ sở dữ liệu về tất cả các giá trị của độ lệch múi giờ. IANA cũng phát hành các bản cập nhật thường xuyên bao gồm mọi thay đổi về chênh lệch múi giờ. Cơ sở dữ liệu này thường được bao gồm trong hệ điều hành của bạn, mặc dù một số ứng dụng nhất định có thể bao gồm một bản sao cập nhật
Cơ sở dữ liệu chứa một bản sao của tất cả các múi giờ được chỉ định và số giờ và phút mà chúng được bù trừ từ UTC. Vì vậy, trong mùa đông, khi thời gian tiết kiệm ánh sáng ban ngày không có hiệu lực, múi giờ miền Đông Hoa Kỳ có độ lệch -05. 00, hoặc âm năm giờ từ UTC. Các khu vực khác có độ lệch khác nhau, có thể không phải là số nguyên giờ. Ví dụ, độ lệch UTC cho Nepal là +05. 45, hoặc dương năm giờ bốn mươi lăm phút tính từ UTC
Làm thế nào ngày tiêu chuẩn có thể được báo cáo
Thời gian Unix là cách máy tính đếm thời gian, nhưng con người sẽ cực kỳ kém hiệu quả khi xác định thời gian bằng cách tính số giây từ một ngày tùy ý. Thay vào đó, chúng tôi làm việc theo năm, tháng, ngày, v.v. Nhưng ngay cả với những quy ước này, một lớp phức tạp khác bắt nguồn từ thực tế là các ngôn ngữ và nền văn hóa khác nhau có cách viết ngày tháng khác nhau.
Ví dụ, ở Hoa Kỳ, ngày tháng thường được viết bắt đầu bằng tháng, rồi đến ngày, rồi đến năm. Điều này có nghĩa là ngày 31 tháng 1 năm 2020 được viết là 01-31-2020. Điều này phù hợp chặt chẽ với phiên bản viết dài của ngày
Tuy nhiên, hầu hết châu Âu và nhiều khu vực khác viết ngày bắt đầu bằng ngày, rồi đến tháng, rồi đến năm. Điều này có nghĩa là ngày 31 tháng 1 năm 2020 được viết là 31-01-2020. Những khác biệt này có thể gây ra đủ loại nhầm lẫn khi giao tiếp giữa các nền văn hóa
Để giúp tránh những lỗi giao tiếp, Tổ chức Tiêu chuẩn hóa Quốc tế (ISO) đã phát triển ISO 8601. Tiêu chuẩn này chỉ định rằng tất cả các ngày phải được viết theo thứ tự dữ liệu quan trọng nhất đến ít quan trọng nhất. Điều này có nghĩa là định dạng là năm, tháng, ngày, giờ, phút và giây
Thời gian nên được lưu trữ như thế nào trong chương trình của bạn
Hầu hết các nhà phát triển đã làm việc với thời gian đã nghe lời khuyên chuyển đổi giờ địa phương thành UTC và lưu trữ giá trị đó để tham khảo sau này. Trong nhiều trường hợp, đặc biệt là khi bạn đang lưu trữ ngày tháng trong quá khứ, đây là thông tin đủ để thực hiện bất kỳ phép tính số học cần thiết nào.
Tuy nhiên, có thể xảy ra sự cố nếu người dùng chương trình của bạn nhập ngày trong tương lai theo giờ địa phương của họ. Múi giờ và các quy tắc về thời gian tiết kiệm ánh sáng ban ngày thay đổi khá thường xuyên, như bạn đã thấy trước đó với thay đổi về thời gian tiết kiệm ánh sáng ban ngày năm 2007 cho Hoa Kỳ và Canada. Nếu quy tắc múi giờ cho vị trí của người dùng của bạn thay đổi trước ngày trong tương lai mà họ đã nhập, thì UTC sẽ không cung cấp đủ thông tin để chuyển đổi trở lại giờ địa phương chính xác
Ghi chú. Có một số tài nguyên tuyệt vời có sẵn để giúp bạn xác định cách thích hợp để lưu trữ dữ liệu thời gian trong ứng dụng của mình. Đây là một vài nơi để bắt đầu
Thời gian tiết kiệm ánh sáng ban ngày và thực tiễn tốt nhất về múi giờ
Lưu trữ UTC không phải là Viên đạn bạc
Cách lưu ngày giờ cho các sự kiện trong tương lai
Các phương pháp mã hóa tốt nhất bằng cách sử dụng DateTime trong. Nền tảng NET
Trong trường hợp này, bạn cần lưu trữ giờ địa phương, bao gồm cả múi giờ mà người dùng đã nhập cũng như phiên bản của cơ sở dữ liệu múi giờ IANA có hiệu lực khi người dùng lưu thời gian. Bằng cách này, bạn sẽ luôn có thể chuyển đổi giờ địa phương sang UTC. Tuy nhiên, phương pháp này không phải lúc nào cũng cho phép bạn chuyển đổi UTC sang giờ địa phương chính xác
Loại bỏ các quảng cáo
Sử dụng Mô-đun >>> from datetime import date, time, datetime
>>> date(year=2020, month=1, day=31)
datetime.date(2020, 1, 31)
>>> time(hour=13, minute=14, second=31)
datetime.time(13, 14, 31)
>>> datetime(year=2020, month=1, day=31, hour=13, minute=14, second=31)
datetime.datetime(2020, 1, 31, 13, 14, 31)
7 của Python
Như bạn có thể thấy, làm việc với ngày tháng và thời gian trong lập trình có thể phức tạp. May mắn thay, ngày nay bạn hiếm khi cần triển khai các tính năng phức tạp từ đầu vì có sẵn nhiều thư viện mã nguồn mở để trợ giúp. Đây chắc chắn là trường hợp của Python, bao gồm ba mô-đun riêng biệt trong thư viện chuẩn để làm việc với ngày và giờ
xuất lịch và cung cấp các chức năng bằng cách sử dụng lịch Gregorian được lý tưởng hóa
7 là làm cho việc truy cập các thuộc tính của đối tượng liên quan đến ngày, giờ và múi giờ trở nên dễ dàng hơn. Vì những đối tượng này rất hữu ích, nên
9 trả về một thể hiện đặc biệt. Đối tượng này có giao diện bộ dữ liệu được đặt tên để truy cập dữ liệu được lưu trữ, làm cho nó tương tự như một phiên bản của
7 và khởi tạo từng lớp đó bằng cách truyền đối số cho hàm tạo. Bạn có thể thấy rằng mã này hơi dài dòng và nếu bạn không có thông tin bạn cần dưới dạng số nguyên, thì các kỹ thuật này không thể được sử dụng để tạo các phiên bản
7 này rất hữu ích khi bạn không biết trước thông tin nào bạn cần chuyển vào bộ khởi tạo cơ bản. Bạn có thể dùng thử mã này để xem cách hoạt động của các trình khởi tạo thay thế
7 và ________0____9. Mỗi phiên bản được lưu trữ trong một biến khác nhau
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
7 có năm, tháng, ngày, giờ, phút, giây và micro giây
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
9 có giờ, phút và giây được đặt thành cùng các giá trị như
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
5
Ở dòng cuối cùng, bạn kết hợp thông tin ngày tháng trong
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
3 với thông tin thời gian trong
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
7 tại UTC hiện tại. Tuy nhiên, Python khuyên bạn không nên sử dụng phương pháp này vì nó không bao gồm bất kỳ thông tin múi giờ nào trong trường hợp kết quả
Sử dụng
YYYY-MM-DD HH:MM:SS
04 có thể tạo ra một số kết quả đáng ngạc nhiên khi thực hiện phép tính số học hoặc so sánh giữa các trường hợp
Sử dụng các chuỗi để tạo các trường hợp >>> from datetime import date, time, datetime
>>> date(year=2020, month=1, day=31)
datetime.date(2020, 1, 31)
>>> time(hour=13, minute=14, second=31)
datetime.time(13, 14, 31)
>>> datetime(year=2020, month=1, day=31, hour=13, minute=14, second=31)
datetime.datetime(2020, 1, 31, 13, 14, 31)
7 Python
7 là sử dụng. Để sử dụng phương pháp này, bạn cung cấp một chuỗi có ngày ở định dạng ISO 8601 mà bạn đã tìm hiểu về. Chẳng hạn, bạn có thể cung cấp một chuỗi có năm, tháng và ngày được chỉ định
2020-01-31
Chuỗi này đại diện cho ngày 31 tháng 1 năm 2020, theo định dạng ISO 8601. Bạn có thể tạo một phiên bản
7 cho ngày 31 tháng 1 năm 2020. Phương pháp này rất hữu ích vì nó dựa trên tiêu chuẩn ISO 8601. Nhưng nếu bạn có một chuỗi biểu thị ngày và giờ nhưng không ở định dạng ISO 8601 thì sao?
7 cung cấp một phương thức được gọi để xử lý tình huống này. Phương pháp này sử dụng một ngôn ngữ nhỏ đặc biệt để báo cho Python biết phần nào của chuỗi được liên kết với thuộc tính
16, bạn phải cho Python biết mỗi phần của chuỗi đại diện cho điều gì bằng cách sử dụng mã định dạng từ ngôn ngữ nhỏ. Bạn có thể thử ví dụ này để xem cách hoạt động của
22, bạn bao gồm một số mã định dạng và tất cả các dấu gạch ngang (
YYYY-MM-DD HH:MM:SS
26), dấu hai chấm (
YYYY-MM-DD HH:MM:SS
27) và dấu cách chính xác như chúng xuất hiện trong
YYYY-MM-DD HH:MM:SS
21. Để xử lý ngày và giờ trong
YYYY-MM-DD HH:MM:SS
21, bạn bao gồm các mã định dạng sau
Thành phầnMãGiá trịNăm (dưới dạng số nguyên có bốn chữ số)
YYYY-MM-DD HH:MM:SS
302020Tháng (dưới dạng số thập phân không đệm)
YYYY-MM-DD HH:MM:SS
3101Ngày (dưới dạng số thập phân không đệm)
YYYY-MM-DD HH:MM:SS
3231Giờ (dưới dạng số thập phân không đệm với đồng hồ 24 giờ)
YYYY-MM-DD HH:MM:SS
3314Phút (dưới dạng số thập phân không đệm)
YYYY-MM-DD HH:MM:SS
3445Giây (dưới dạng số không-
Danh sách đầy đủ tất cả các tùy chọn bằng ngôn ngữ nhỏ nằm ngoài phạm vi của hướng dẫn này, nhưng bạn có thể tìm thấy một số tài liệu tham khảo tốt trên web, bao gồm cả trong Python và trên trang web có tên strftime. tổ chức
Giờ thì
YYYY-MM-DD HH:MM:SS
21 và
YYYY-MM-DD HH:MM:SS
22 đã được xác định, bạn có thể sử dụng chúng để tạo phiên bản
7 24 giờ trong tương lai. Tại thời điểm viết bài, đây là ngày 15 tháng 3 lúc 2. 39 giờ tốiLoại bỏ các quảng cáo
Bắt đầu đếm ngược PyCon của bạn
Bây giờ bạn đã có đủ thông tin để bắt đầu làm việc trên đồng hồ đếm ngược cho PyCon US năm sau. PyCon US 2021 sẽ bắt đầu vào ngày 12 tháng 5 năm 2021 tại Pittsburgh, PA. Với sự kiện năm 2020 đã bị hủy bỏ, nhiều Pythonistas đang vô cùng hào hứng cho cuộc tụ họp năm sau. Đây là một cách tuyệt vời để theo dõi xem bạn sẽ phải đợi bao lâu và đồng thời nâng cao kỹ năng
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
62, lưu trữ ngày của PyCon US tiếp theo. Bạn không mong đợi ngày của PyCon sẽ thay đổi, vì vậy bạn đặt tên biến bằng chữ in hoa toàn bộ để cho biết rằng đó là một hằng số
7. Đồng bằng trong tên là một tham chiếu đến chữ cái Hy Lạp delta, được sử dụng trong khoa học và kỹ thuật có nghĩa là một sự thay đổi. Bạn sẽ tìm hiểu thêm về cách sử dụng
YYYY-MM-DD HH:MM:SS
67 cho các phép tính số học tổng quát hơn
Cuối cùng là bản in, kể từ ngày 9 tháng 4 năm 2020 trước 9 giờ một chút. 30 giờ chiều là
YYYY-MM-DD HH:MM:SS
0
Chỉ còn 397 ngày nữa là đến PyCon US 2021. Đầu ra này hơi lộn xộn, vì vậy bạn sẽ thấy cách bạn có thể cải thiện định dạng. Nếu bạn chạy tập lệnh này vào một ngày khác, bạn sẽ nhận được một kết quả khác. Nếu bạn chạy tập lệnh sau ngày 12 tháng 5 năm 2021 lúc 8. 00 giờ sáng, bạn sẽ nhận được một khoảng thời gian âm
Làm việc với múi giờ
Như bạn đã thấy trước đó, việc lưu trữ múi giờ trong đó một ngày diễn ra là một khía cạnh quan trọng để đảm bảo mã của bạn chính xác. Python
7 ngây thơ và có nhận thức. Nếu bạn đã biết tất cả về điều này, thì bạn có thể cải thiện bộ đếm ngược PyCon của mình bằng thông tin múi giờLoại bỏ các quảng cáo
So sánh các trường hợp >>> from datetime import date, time, datetime
>>> date(year=2020, month=1, day=31)
datetime.date(2020, 1, 31)
>>> time(hour=13, minute=14, second=31)
datetime.time(13, 14, 31)
>>> datetime(year=2020, month=1, day=31, hour=13, minute=14, second=31)
datetime.datetime(2020, 1, 31, 13, 14, 31)
7 Naive và Aware Python
7 hỗ trợ hai loại hoạt động, ngây thơ và nhận thức. Sự khác biệt cơ bản giữa chúng là các trường hợp ngây thơ không chứa thông tin múi giờ, trong khi các trường hợp nhận biết thì có. Chính thức hơn, để trích dẫn tài liệu Python
Một đối tượng nhận thức đại diện cho một thời điểm cụ thể không thể giải thích được. Một đối tượng ngây thơ không chứa đủ thông tin để định vị chính nó một cách rõ ràng so với các đối tượng ngày/giờ khác. ()
Đây là một điểm khác biệt quan trọng khi làm việc với Python
7 ngây thơ có thể mơ hồ. Một ví dụ về sự mơ hồ này liên quan đến thời gian tiết kiệm ánh sáng ban ngày. Các khu vực áp dụng tiết kiệm thời gian ban ngày vặn đồng hồ về phía trước một giờ vào mùa xuân và lùi lại một giờ vào mùa thu. Điều này thường xảy ra ở 2. 00 giờ sáng giờ địa phương. Vào mùa xuân, giờ từ 2. 00 giờ sáng đến 2. 59 giờ sáng không bao giờ xảy ra và vào mùa thu, giờ từ 1. 00 giờ sáng đến 1. 59 AM xảy ra hai lần
Trên thực tế, điều xảy ra là phần bù từ UTC ở các múi giờ này thay đổi trong suốt cả năm. IANA theo dõi những thay đổi này và lập danh mục chúng trong các tệp cơ sở dữ liệu khác nhau mà máy tính của bạn đã cài đặt. Sử dụng một thư viện như
YYYY-MM-DD HH:MM:SS
76, sử dụng cơ sở dữ liệu IANA bên dưới, là một cách tuyệt vời để đảm bảo rằng mã của bạn xử lý số học đúng cách theo thời gian
Ghi chú. Trong Python, sự khác biệt giữa các trường hợp
39 bị giới hạn trong việc thể hiện các độ lệch cố định từ UTC không thể thay đổi trong suốt cả năm, do đó, nó không hữu ích khi bạn cần tính đến các thay đổi, chẳng hạn như giờ mùa hè
5 theo dõi cơ sở dữ liệu IANA, do đó, mô-đun này bao gồm các thay đổi như thời gian tiết kiệm ánh sáng ban ngày. Tuy nhiên, cho đến Python 3. 9 được sử dụng rộng rãi, có thể dựa vào
7 nhận biết. Nhưng các trường hợp nhận biết là rất quan trọng nếu bạn đang so sánh thời gian với nhau, đặc biệt nếu bạn đang so sánh thời gian ở các khu vực khác nhau trên thế giới
Cải thiện bộ đếm ngược PyCon của bạn
Bây giờ bạn đã biết cách thêm thông tin múi giờ vào phiên bản Python
7, bạn có thể cải thiện mã đếm ngược PyCon của mình. Trước đó, bạn đã sử dụng hàm tạo ____0_______7 tiêu chuẩn để chuyển năm, tháng, ngày và giờ mà PyCon sẽ bắt đầu. Bạn có thể cập nhật mã của mình để sử dụng mô-đun
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
5 để biểu thị thời điểm hiện tại và cung cấp cho múi giờ địa phương của bạn. Cuối cùng, bạn tìm
YYYY-MM-DD HH:MM:SS
67 giữa
YYYY-MM-DD HH:MM:SS
62 và
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
5 và in kết quả. Nếu bạn đang ở một địa phương không điều chỉnh đồng hồ theo giờ mùa hè, thì bạn có thể thấy số giờ còn lại cho đến khi PyCon thay đổi một giờ
Làm số học với Python >>> from datetime import date, time, datetime
>>> date(year=2020, month=1, day=31)
datetime.date(2020, 1, 31)
>>> time(hour=13, minute=14, second=31)
datetime.time(13, 14, 31)
>>> datetime(year=2020, month=1, day=31, hour=13, minute=14, second=31)
datetime.datetime(2020, 1, 31, 13, 14, 31)
7
7 hỗ trợ một số loại số học. Như bạn đã thấy trước đó, điều này phụ thuộc vào việc sử dụng các phiên bản
YYYY-MM-DD HH:MM:SS
67 để biểu thị các khoảng thời gian.
YYYY-MM-DD HH:MM:SS
67 rất hữu ích vì nó được tích hợp vào thư viện chuẩn của Python. Đây là một ví dụ về cách làm việc với
YYYY-MM-DD HH:MM:SS
67
>>>
YYYY-MM-DD HH:MM:SS
6
Trong mã này, bạn tạo
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
67 hỗ trợ phép cộng và phép trừ cũng như số nguyên dương và âm cho tất cả các đối số. Bạn thậm chí có thể cung cấp kết hợp các đối số tích cực và tiêu cực. Chẳng hạn, bạn có thể muốn cộng ba ngày và trừ đi bốn giờ
>>>
YYYY-MM-DD HH:MM:SS
8
Trong ví dụ này, bạn cộng ba ngày và trừ đi bốn giờ, do đó,
67 rất hữu ích theo cách này, nhưng nó hơi hạn chế vì nó không thể cộng hoặc trừ các khoảng thời gian lớn hơn một ngày, chẳng hạn như một tháng hoặc một năm. May mắn thay,
67. Bạn có thể cung cấp các đối số từ khóa tạo ra các thay đổi theo bất kỳ số năm, tháng, ngày, giờ, giây hoặc micro giây nào. Bạn có thể tạo lại ví dụ về
7 tương ứng với ngày mai. Bây giờ, bạn có thể thử cộng năm năm, một tháng và ba ngày vào
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
Lưu ý trong ví dụ này rằng ngày kết thúc là ngày 1 tháng 3 năm 2025. Điều này là do thêm ba ngày vào
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
5 sẽ là ngày 29 tháng 1 và thêm một tháng vào ngày đó sẽ là ngày 29 tháng 2, chỉ tồn tại trong năm nhuận. Vì năm 2025 không phải là năm nhuận nên ngày sẽ chuyển sang tháng tiếp theo
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
27 đồ vật có vô số công dụng khác. Bạn có thể sử dụng chúng để tìm thông tin lịch phức tạp, chẳng hạn như năm tới trong đó ngày 13 tháng 10 rơi vào Thứ Sáu hoặc ngày nào sẽ rơi vào Thứ Sáu cuối cùng của tháng hiện tại. Bạn thậm chí có thể sử dụng chúng để thay thế các thuộc tính của một phiên bản
99 để tính toán thời gian còn lại cho đến khi có PyCon, phát triển một hàm để in thời gian còn lại ở định dạng đẹp và hiển thị ngày của PyCon cho người dùng
Sử dụng >>> from datetime import date, time, datetime
>>> date(year=2020, month=1, day=31)
datetime.date(2020, 1, 31)
>>> time(hour=13, minute=14, second=31)
datetime.time(13, 14, 31)
>>> datetime(year=2020, month=1, day=31, hour=13, minute=14, second=31)
datetime.datetime(2020, 1, 31, 13, 14, 31)
99 trong Đếm ngược PyCon của bạn
Mã này yêu cầu Python 3. 8 vì nó sử dụng cái mới. Bạn có thể làm cho tập lệnh này hoạt động trên các phiên bản Python cũ hơn bằng cách sử dụng vòng lặp truyền thống
52 để in đầu ra nhằm cho người dùng biết ngày PyCon US sẽ bắt đầu. Hãy nhớ rằng, bạn có thể tìm thấy các mã định dạng mà bạn muốn sử dụng trên strftime. tổ chức. Bây giờ hãy thêm mã này vào dòng 18 của tập lệnh đếm ngược PyCon của bạn
Dòng 19 bạn in chuỗi này cho người dùng xem kèm theo một số văn bản giải thích. Dòng cuối cùng in lượng thời gian còn lại cho đến ngày bắt đầu PyCon. Tiếp theo, bạn sẽ hoàn thành tập lệnh của mình để giúp người khác sử dụng lại dễ dàng hơn
Loại bỏ các quảng cáo
Hoàn thiện bộ đếm ngược PyCon của bạn
Bước cuối cùng mà bạn muốn thực hiện là tuân theo các phương pháp hay nhất của Python và đặt mã tạo đầu ra vào hàm
61 chỉ chạy khi tệp này được thực thi dưới dạng tập lệnh. Điều này cho phép những người khác nhập mã của bạn và sử dụng lại
YYYY-MM-DD HH:MM:SS
62 chẳng hạn, nếu họ muốn
Bây giờ bạn có thể sửa đổi tập lệnh này bao nhiêu tùy thích. Một điều thú vị có thể làm là cho phép người dùng thay đổi múi giờ được liên kết với
# pyconcd.pyfromdatetimeimportdatetimePYCON_DATE=datetime(year=2021,month=5,day=12,hour=8)countdown=PYCON_DATE-datetime.now()print(f"Countdown to PyCon US 2021: {countdown}")
5 bằng cách chuyển đối số dòng lệnh. Bạn cũng có thể thay đổi
YYYY-MM-DD HH:MM:SS
62 thành thứ gì đó gần nhà hơn, chẳng hạn như PyCon Châu Phi hoặc EuroPython
Để hào hứng hơn nữa về PyCon, hãy xem Real Python tại PyCon US 2019 và Cách tận dụng tối đa PyCon
Các lựa chọn thay thế cho Python >>> from datetime import date, time, datetime
>>> date(year=2020, month=1, day=31)
datetime.date(2020, 1, 31)
>>> time(hour=13, minute=14, second=31)
datetime.time(13, 14, 31)
>>> datetime(year=2020, month=1, day=31, hour=13, minute=14, second=31)
datetime.datetime(2020, 1, 31, 13, 14, 31)
7 và YYYY-MM-DD HH:MM:SS
76
76 là sự kết hợp mạnh mẽ giữa các thư viện khi bạn làm việc với ngày và giờ.
YYYY-MM-DD HH:MM:SS
76 thậm chí còn được đề xuất trong tài liệu Python. Tuy nhiên, có nhiều thư viện khác mà bạn có thể sử dụng để làm việc với ngày và giờ trong Python. Một số trong số này dựa vào
7 tích hợp, nhưng phiên bản NumPy có thể được sử dụng trong các mảng
Pandas cung cấp hỗ trợ cho dữ liệu chuỗi thời gian trong DataFrames, thường là các giá trị tuần tự của các sự kiện dựa trên thời gian, bằng cách sử dụng mô-đun NumPy
cftime cung cấp hỗ trợ cho các lịch khác với lịch Gregorian tiên sinh cũng như các đơn vị thời gian khác tuân theo các quy ước về Khí hậu và Dự báo (CF). Nó được sử dụng bởi gói
Vì lập trình theo thời gian có thể rất phức tạp nên có rất nhiều tài nguyên trên web giúp bạn tìm hiểu thêm về nó. May mắn thay, đây là một vấn đề mà nhiều người làm việc với mọi ngôn ngữ lập trình đã nghĩ đến, vì vậy bạn thường có thể tìm thấy thông tin hoặc công cụ để trợ giúp cho bất kỳ vấn đề nào mà bạn có thể gặp phải. Đây là danh sách chọn lọc các bài báo và video mà tôi thấy hữu ích khi viết hướng dẫn này
Thời gian tiết kiệm ánh sáng ban ngày và thực tiễn tốt nhất về múi giờ
Lưu trữ UTC không phải là Viên đạn bạc
Cách lưu ngày giờ cho các sự kiện trong tương lai
Các phương pháp mã hóa tốt nhất bằng cách sử dụng DateTime trong. Nền tảng NET
Yêu máy tính. Vấn đề với Thời gian & Múi giờ
Sự phức tạp của lập trình dữ liệu thời gian
Ngoài ra, Paul Ganssle là người đóng góp cốt lõi cho CPython và là người duy trì hiện tại của
YYYY-MM-DD HH:MM:SS
76. Các bài báo và video của anh ấy là một nguồn tài nguyên tuyệt vời cho người dùng Python
Làm việc với Múi giờ. Mọi thứ bạn ước mình không cần biết (PyCon 2019)
pytz. Khẩu súng ngắn nhanh nhất ở phương Tây
Ngừng sử dụng utcnow và utcfromtimestamp
Một trường hợp tò mò về so sánh thời gian không chuyển tiếp
Phần kết luận
Trong hướng dẫn này, bạn đã học về lập trình với ngày tháng và thời gian và tại sao nó thường dẫn đến sai sót và nhầm lẫn. Bạn cũng đã học về các mô-đun
Cuối cùng, bạn đã tạo một tập lệnh đếm ngược thời gian còn lại cho đến PyCon US tiếp theo để bạn có thể hào hứng với cuộc tụ tập Python lớn nhất xung quanh. Ngày và giờ có thể phức tạp, nhưng với các công cụ Python này trong kho vũ khí của bạn, bạn đã sẵn sàng để giải quyết những vấn đề khó khăn nhất
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Sử dụng Mô-đun datetime của Python
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Bryan Weber
Bryan là nhà phát triển cốt lõi của Cantera, nền tảng mã nguồn mở cho nhiệt động lực học, động học hóa học và vận chuyển. Là một nhà phát triển nói chung, Bryan thực hiện Python từ web đến khoa học dữ liệu và mọi nơi ở giữa
» Thông tin thêm về Bryan
Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Geir Arne
Joanna
Gia-cốp
Mirko
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Chuyên gia Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ Email
Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi