2012-01-10 8 views
9

में यूटीसी (aws ec2) से पीएसटी में कनवर्ट करने की आवश्यकता है, मुझे यूटीसी समय, (ec2 इंस्टेंस पर) को पीएसटी में कनवर्ट करने की आवश्यकता है। मैं ऐसा करने की कोशिश कर रहा हूं।को पाइथन

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) 

लेकिन उत्पादन होता है:

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

किसी भी कारण है कि मैं सही पीएसटी समय नहीं मिल रहा है?

उत्तर

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) 

मेरे लिए :) काम करने के लिए लगता है यह कर सकते हैं - समय क्षेत्र, भ्रमित कर रहे हैं धीरे धीरे क्या मैं वास्तव में क्या करना चाहते हैं मेरी मदद की एक योजना बना रही है समय की सबसे

+1

धन्यवाद दोस्त, टाइम्सज़ोन पीठ में दर्द कर रहे हैं, डेलाइट बचत और भी सिरदर्द है! – Nish

+0

इसके लिए धन्यवाद। एक साधारण उदाहरण खोजने में मुश्किल है। मुझे यह Google एप इंजन पर इस के साथ काम कर रहा है: gaepytz। उपरोक्त कोड वही काम करता है, केवल पाठ परिवर्तन आयात करें। –

+0

मैंने इस प्रश्न का उत्तर दिया और जवाब दिया क्योंकि मुझे पूरा यकीन है कि यह किसी भी व्यक्ति के लिए गलत है जो वास्तव में "पीएसटी" चाहता है। प्रशांत-नई स्थानीय प्रशांत समय का उत्पादन करता है, मानक समय नहीं। जनवरी की तारीख के लिए कोई अंतर नहीं है, लेकिन गर्मी में यह एक मुद्दा होगा। –

3

मुझे लगता है कि आप datetime.utcnow() चाहते हैं यदि आप अपने उदाहरण में यूटीसी समय अनुकरण करने का प्रयास कर रहे हैं।

दूसरी समस्या यह है कि डिफ़ॉल्ट रूप से ऑब्जेक्ट में कोई टाइमज़ोन नहीं होता है। इसका मतलब यह नहीं है कि यह यूटीसी है, और मुझे लगता है कि pytz बस उस ऑब्जेक्ट के लिए लोकलटाइम के लिए डिफ़ॉल्ट है। इससे पहले कि आप इसे पीएसटी में परिवर्तित करने का प्रयास करें, आपको यूटीसी के रूप में टाइमज़ोन सेट के साथ एक नया डेटाटाइम ऑब्जेक्ट बनाना होगा।

आप के माध्यम से

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

धन्यवाद माइकल। मुझे लगता है कि तिथि एक डिफ़ॉल्ट टाइमज़ोन है। यह समस्या तय की। – Nish

+0

धन्यवाद, जब हम सीधे यूटीसी में समय प्राप्त कर सकते हैं - हम इसकी आवश्यकता होने तक pytz से रूपांतरण से बच सकते हैं। – shahjapan

2

localize पर कॉल करके आप बताएं कि आपका समय क्या है TZ। तो, आपके उदाहरण में आप कहते हैं कि आपकी तिथि पीएसटी में है, तो आप पीएसटी के लिए astimezone पर कॉल करें और उसी समय प्राप्त करें जो अपेक्षित है। आपको शायद निम्नलिखित की आवश्यकता है:

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) 

क्षमा करें, यह कोड निष्पादित नहीं करता है या नहीं - यह पुस्तकालय वर्कस्टेशन पर नहीं है।

+0

धन्यवाद। यह बहुत अच्छा काम करता है! – Nish

0

यदि आप वर्तमान एक EC2 उदाहरण के launchtime के आधार पर सक्रिय रहने की अवधि की गणना करना चाहते हैं, एक यह कोशिश कर सकते हैं:

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

एक पंक्ति में यह करें:

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

यह वास्तव में मेरी मदद करता है। मैं 2 घंटे से टाइमज़ोन के साथ संघर्ष कर रहा था। –

संबंधित मुद्दे