Ngày giờ Python sai múi giờ

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

Ngày giờ Python sai múi giờ

Đặ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

d.year
> 1984

d.month
> 1

d.day
> 10

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ờ

________số 8

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
0

Mộ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
1

Khi 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
2

Vì 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
3

4

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
4

Vì 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
6

Biế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
7

Tấ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
8

Sau đó, chúng ta có thể chỉ cần làm phép tính

from datetime import datetime, timedelta
9

Và 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)
0

5

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

Ngày giờ Python sai múi giờ

Tìm hiểu các ABC của XYZ

Ngày giờ Python sai múi giờ
Tro tàn (362)

Ngày 24 tháng 6 năm 2022

Blender 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

Múi giờ datetime của Python có nhận biết không?

Các đối tượng nhận biết múi giờ là các đối tượng Ngày giờ hoặc thời gian của Python bao gồm thông tin múi giờ . 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.

Làm cách nào để xóa múi giờ khỏi datetime trong Python?

Đối tượng DateTime với thông tin múi giờ sau đó được thao tác bằng cách sử dụng. replace() để xóa thông tin múi giờ bằng tham số tzinfo .

Thời gian của Python có ở UTC không?

Bạn có thể sử dụng mô-đun ngày giờ để chuyển đổi ngày giờ thành dấu thời gian UTC trong Python . Nếu bạn đã có đối tượng datetime trong UTC, bạn có thể timestamp() để lấy dấu thời gian UTC. Hàm này trả về thời gian kể từ epoch cho đối tượng datetime đó.

TZInfo là gì?

TZInfo là thư viện Ruby cung cấp quyền truy cập vào dữ liệu múi giờ và cho phép chuyển đổi thời gian bằng quy tắc múi giờ .