2012-10-19 30 views
13

में पायट्ज़ के साथ एपोक टाइम को स्थानीयकरण करना मैं इमोक टाइमस्टैम्प को पित्ज़ के साथ अलग-अलग समय क्षेत्रों में तारीखों में परिवर्तित करने पर काम कर रहा हूं। जो मैं करने की कोशिश कर रहा हूं वह डेटटाइम ऑब्जेक्ट बनाता है जो ओल्सन डेटाबेस टाइमज़ोन और एक युग के समय को स्वीकार करता है और स्थानीयकृत डेटाटाइम ऑब्जेक्ट देता है। आखिरकार मुझे सवालों के जवाब देने की जरूरत है जैसे "न्यूयॉर्क में युग के समय 1350663248 पर क्या समय था?"पाइथन

कुछ सही ढंग से यहाँ काम नहीं कर रहा:

import datetime, pytz, time 

class DateTime: 
    def __init__(self, timezone, epoch): 
     self.timezone = timezone 
     self.epoch = epoch 
     timezoneobject = pytz.timezone(timezone) 
     datetimeobject = datetime.datetime.fromtimestamp(self.epoch) 
     self.datetime = timezoneobject.localize(datetimeobject) 

    def hour(self): 
     return self.datetime.hour 

if __name__=='__main__': 
    epoch = time.time() 
    dt = DateTime('America/Los_Angeles',epoch) 
    print dt.datetime.hour 
    dt = DateTime('America/New_York',epoch) 
    print dt.datetime.hour 

यह वही घंटे प्रिंट, जबकि एक 3 या तो घंटे आगे होना चाहिए। क्या गलत हो रहा है? मैं कुल पायथन शुरुआत कर रहा हूं, किसी भी मदद की सराहना की जाती है!

+0

आप यहां गलत शब्दावली का उपयोग कर रहे हैं। युग * हमेशा * 1-1-19 70, आधी रात यूटीसी है। आपके पास यूनिक्स टाइमस्टैम्प है, जो युग से ऑफसेट है। Https://en.wikipedia.org/wiki/Unix_epoch –

+0

केवल एक परिवर्तनीय नाम देखें, आप इसे 'epoch_time' कह सकते हैं, इससे समस्या – mobiusinversion

उत्तर

-3
epochdt = datetime.datetime.fromtimestamp(epoch) 
timezone1 = timezone("Timezone/String") 
adjusted_datetime = timezone1.localize(epochdt) 

स्मृति से कार्य करना, इसलिए किसी वाक्यविन्यास त्रुटियों से बहाना, लेकिन यह आपको सही रास्ते पर ले जाना चाहिए।

संपादित करें: घंटे जानने के बारे में हिस्सा मिस गया। पायथन में Time/Date Formatting बहुत अच्छा है। उस लिंक के नीचे बहुत अधिक तालिका तालिका है जो डेटाटाइम ऑब्जेक्ट से विभिन्न विशेषताओं को खींचने के लिए दिखाती है।

+0

समस्या में कोई फर्क नहीं पड़ता ओपी यही कर रहा है। –

+0

प्रारंभिक दृष्टिकोण के समान ही है, लेकिन इसे कार्यान्वित करना अभी भी उसी घंटे (ऊपर __main__ कोड में) प्रिंट करता है। असल में इसकी 8 बजे जहां मैं अभी हूं। मैं यह पता लगाने की कोशिश कर रहा हूं कि ऊपर दिए गए कोड को क्रमशः अमेरिका और लॉस_एंजेलस और अमेरिका/न्यू_यॉर्क के लिए 8 और 11 मीटर प्रिंट करने के लिए कैसे प्राप्त करें। – mobiusinversion

19

datetime.fromtimestamp(self.epoch) स्थानीय स्तर पर लौटाता है जिसका उपयोग मनमाने ढंग से timezone.localize() के साथ नहीं किया जाना चाहिए; आप utcfromtimestamp() जरूरत यूटीसी में datetime मिलता है और फिर इसे एक वांछित समय क्षेत्र में बदलने के लिए:

from datetime import datetime 
import pytz 

# get time in tz 
tz = pytz.timezone('America/New_York') 
dt = datetime.fromtimestamp(posix_timestamp, tz) 
# print it 
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z')) 

यह इस में परोक्ष यूटीसी से धर्मान्तरित:

from datetime import datetime 
import pytz 

# get time in UTC 
utc_dt = datetime.utcfromtimestamp(posix_timestamp).replace(tzinfo=pytz.utc) 

# convert it to tz 
tz = pytz.timezone('America/New_York') 
dt = utc_dt.astimezone(tz) 

# print it 
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z')) 

या एक सरल विकल्प सीधे टाइमस्टैम्प से निर्माण करने के लिए है मामला।

0

datetime वस्तु एक यूनिक्स टाइमस्टैम्प से विशेष समय क्षेत्र से संबंधित बनाने के लिए, आप pytz वस्तु एक tz पैरामीटर के रूप में, जबकि अपनी datetime बनाने पारित कर सकते हैं। उदाहरण के लिए:

>>> from datetime import datetime 
>>> import pytz 

>>> datetime.fromtimestamp(1350663248, tz= pytz.timezone('America/New_York')) 
datetime.datetime(2012, 10, 19, 12, 14, 8, tzinfo=<DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>) 

आप pytz.all_timezones का उपयोग कर सभी समय क्षेत्र की सूची प्राप्त कर सकते हैं।

List of tz database time zones विकी पर भी एक नज़र डालें।