2010-01-28 26 views
5

Tôi cần biết thời gian hiện tại tại CDT khi kịch bản Python của tôi chạy. Tuy nhiên, tập lệnh này sẽ được chạy trong nhiều múi giờ khác nhau, do đó, việc bù đắp đơn giản sẽ không hoạt động. Tôi chỉ cần một giải pháp cho Linux, nhưng một giải pháp nền tảng chéo sẽ là lý tưởng.cách tìm thời gian tại múi giờ cụ thể từ bất cứ nơi nào

+0

CDT đề cập đến "Thời gian ban ngày trung tâm" – hoju

+0

Bạn muốn biết thời gian trong CDT ngay cả khi CDT không có hiệu lực? –

+0

yep - ứng dụng tôi đang giao tiếp với việc sử dụng nó. – hoju

Trả lời

4

Bạn có thể sử dụng time.gmtime() để nhận thời gian GMT (UTC) từ bất kỳ máy nào bất kể múi giờ, sau đó bạn có thể áp dụng bù trừ của mình.

+0

Vấn đề là biết bù đắp là gì, do đó không giúp được gì. –

+0

Lennart, không, anh ấy hỏi làm thế nào để có được thời gian tại một múi giờ đã biết trước đó từ bất kỳ khác, mà 'gmtime()' là giải pháp hoàn hảo .. –

+0

Tôi biết. Vấn đề vẫn còn là biết những gì các offsets giữa hai múi giờ, CDT và một trong những khác, được. –

8

pytz hoặc dateutil.tz là mẹo ở đây. Về cơ bản nó giống như thế này:

>>> from pytz import timezone 
>>> mytz = timezone('Europe/Paris') 
>>> yourtz = timezone('US/Eastern') 

>>> from datetime import datetime 
>>> now = datetime.now(mytz) 
>>> alsonow = now.astimezone(yourtz) 

Khó khăn thực sự nằm trong việc xác định múi giờ bạn đang ở. Dateutil.tz là tốt hơn lúc đó.

>>> from dateutil.tz import tzlocal, gettz 
>>> mytz = tzlocal() 
>>> yourtz = gettz('US/Eastern') 

Nếu bạn muốn tất cả mọi chi tiết về việc tại sao các múi giờ là tà ác, họ đang ở đây:

http://regebro.wordpress.com/2007/12/18/python-and-time-zones-fighting-the-beast/

http://regebro.wordpress.com/2008/05/10/python-and-time-zones-part-2-the-beast-returns/

http://regebro.wordpress.com/2008/05/13/thanks-for-the-testing-help-conclusions/

+0

+1 cho đề xuất 'pytz'. – jathanism

+0

OP có thể chỉ cần: 'datetime.now (pytz.timezone ('US/Central'))'.Múi giờ địa phương không quan trọng. – jfs

1

Một đơn giản bù đắp sẽ làm việc, bạn chỉ cần bù đắp từ UTC.

Sử dụng datetime bạn có thể lấy utc (GMT) thời điểm hiện tại và sử dụng đối tượng datetime:

datetime.datetime.utcnow() - Cung cấp thời gian tại UTC

datetime.datetime.now() - Cung cấp thời gian tại máy cục bộ

Để nhận thời gian CT từ bất kỳ hệ thống nào bạn cần biết bù trừ thời gian CT từ UTC. Sau đó, để tính toán thời gian tiết kiệm ánh sáng ban ngày, hãy mã hóa một hàm để lấy giá trị bù hiện tại.

>>> import datetime 
>>> utc = datetime.datetime.utcnow() 
>>> current_ct_offset = get_current_ct_offset() 
>>> ct_datetime = utc + datetime.timedelta(hours=current_ct_offset) 

Tôi có thể nhìn thấy một cái gì đó ở đây, nhưng nếu bạn chỉ quan tâm đến một múi giờ và không làm việc xử lý tên tz, nó khá thẳng về phía trước.

+0

Vâng, anh ta quan tâm đến hai múi giờ. Các địa phương, và CDT. Và chủ yếu là, với CDT, anh ấy thực sự không có nghĩa là tiết kiệm ánh sáng ban ngày của Trung tâm mà không quan tâm đến những thay đổi trong tiết kiệm ánh sáng ban ngày, bởi vì điều đó thật kỳ lạ. –

+0

Có lẽ câu hỏi cần làm rõ hơn. Sự hiểu biết của tôi là anh ấy muốn "biết thời gian hiện tại tại ". Trong trường hợp này, bạn chỉ cần biết thời gian UTC và utc-offset. Trong trường hợp này bạn không cần phải quan tâm đến giờ địa phương. – monkut

+0

Có. Nhưng cách duy nhất để biết chắc chắn là bù đắp, nếu anh ta quan tâm đến việc tiết kiệm ánh sáng ban ngày (và nó sẽ là ngu ngốc không) là bằng cách sử dụng cơ sở dữ liệu múi giờ. Do đó, câu trả lời của tôi vẫn là câu trả lời đúng. –

Các vấn đề liên quan