2012-01-10 29 views
9

Tôi cần chuyển đổi thời gian UTC, (trên phiên bản ec2) sang PST. Tôi đang cố gắng làm điều này.cần chuyển đổi UTC (aws ec2) sang PST trong python

from datetime import datetime 
from pytz import timezone 
import pytz 

date_format='%m/%d/%Y %H:%M:%S %Z' 
date = datetime.now() 
print 'Current date & time is:', date.strftime(date_format) 

my_timezone=timezone('US/Pacific') 

date = my_timezone.localize(date) 
date = date.astimezone(my_timezone) 

print 'Local date & time is :', date.strftime(date_format) 

Nhưng đầu ra là:

Current date & time is: 01/10/2012 20:01:14 
Local date & time is : 01/10/2012 20:01:14 PST 

Bất kỳ lý do tại sao tôi không nhận được quyền PST thời gian?

Trả lời

14
from datetime import datetime 
from pytz import timezone 
import pytz 

date_format='%m/%d/%Y %H:%M:%S %Z' 
date = datetime.now(tz=pytz.utc) 
print 'Current date & time is:', date.strftime(date_format) 

date = date.astimezone(timezone('US/Pacific')) 

print 'Local date & time is :', date.strftime(date_format) 

dường như làm việc cho tôi :) - múi giờ là khó hiểu, chậm thực hiện một kế hoạch về những gì tôi thực sự muốn làm giúp tôi hầu hết thời gian

+1

Cảm ơn bạn thân, múi giờ bị đau ở lưng, tiết kiệm ánh sáng ban ngày thậm chí còn đau đầu hơn! – Nish

+0

Cảm ơn vì điều này. Khó tìm một ví dụ đơn giản. Tôi đã làm việc này trên công cụ ứng dụng google với điều này: gaepytz. Mã trên hoạt động giống nhau, chỉ nhập các thay đổi văn bản. –

+0

Tôi đã bỏ phiếu cho câu hỏi và câu trả lời này bởi vì tôi khá chắc chắn nó không chính xác đối với bất kỳ ai thực sự muốn "PST". Pacific-New sản xuất giờ địa phương Thái Bình Dương, không phải thời gian tiêu chuẩn. Không có sự khác biệt nào cho ngày tháng 1 được trích dẫn, nhưng nó sẽ là một vấn đề trong mùa hè. –

3

Tôi nghĩ bạn muốn datetime.utcnow() nếu bạn đang cố mô phỏng thời gian UTC trong ví dụ của mình.

Vấn đề khác là theo mặc định đối tượng không có múi giờ. Điều này không có nghĩa là nó là UTC, và tôi nghĩ rằng pytz chỉ là mặc định để localtime cho đối tượng đó. Bạn cần phải tạo một đối tượng datetime mới với múi giờ được đặt là UTC trước khi bạn cố gắng chuyển đổi nó thành PST.

Bạn có thể làm điều này thông qua

date = datetime.utcnow() 
date.replace(tzinfo=pytz.utc) 
+0

Cảm ơn Micheal. Tôi cho rằng ngày có múi giờ mặc định. Nó đã khắc phục được vấn đề. – Nish

+0

Cảm ơn, Khi chúng tôi có thể nhận được thời gian trong UTC trực tiếp - chúng tôi có thể tránh chuyển đổi từ pytz trừ khi được yêu cầu. – shahjapan

2

Bằng cách gọi tới số localize bạn cho biết thời gian của bạn là TZ. Vì vậy, trong ví dụ của bạn, bạn nói rằng ngày của bạn là PST, sau đó bạn gọi astimezone cho PST và nhận được cùng một thời gian dự kiến. Bạn có thể cần những điều sau đây:

utc_dt = pytz.utc.localize(datetime.utcnow()) 
pst_tz = timezone('US/Pacific') 
pst_dt = pst_tz.normalize(utc_dt.astimezone(pst_tz)) 
pst_dt.strftime(fmt) 

Xin lỗi, không thể kiểm tra xem mã này có thực thi không - không có thư viện này trên máy trạm.

+0

Cảm ơn. Nó hoạt động tuyệt vời! – Nish

0

nếu bạn muốn tính thời gian hoạt động hiện tại dựa trên launchtime của một thể EC2, người ta có thể thử điều này:

import datetime 
lt_datetime = datetime.datetime.strptime(inst.launch_time, '%Y-%m-%dT%H:%M:%S') 
lt_delta = datetime.datetime.utcnow() - lt_datetime 
str(lt_delta) 
1

Làm điều này trong một dòng:

>>> import pytz 
>>> pytz.utc.localize(datetime.utcnow()).astimezone(pytz.timezone('US/Pacific')) 
datetime.datetime(2016, 5, 16, 10, 58, 18, 413399, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>) 
+0

Điều này thực sự giúp tôi out.I đã đấu tranh với múi giờ kể từ 2 giờ. –

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