2013-02-20 35 views
13

मैं यूटीसी में अपने सभी समय संग्रहीत कर रहा हूं और मेरा सिस्टम यूटीसी पर सेट है (हालांकि मैं ईएसटी में हूं)।वर्तमान दिन (यूटीसी -> ईएसटी -> यूटीसी) के प्रारंभ और समाप्ति समय का निर्धारण करें; पायथन

मैं के रूप में जमा तिथि होती है:

Wed, 20 Feb 2013 03:51:39 +0000 

हालांकि, मैं ईएसटी के लिए आज बंद आधारित जानकारी का चयन करना चाहते हैं, तो मैं करने के लिए प्रयास कर रहा हूँ:

  • यूटीसी के रूप में वर्तमान समय प्राप्त करें और ईएसटी

    datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz('America/New_York')) 
    2013-02-19 23:17:20.560898-05:00 
    
  • अगला करने के लिए बदल रहा ईएसटी दिन के लिए शुरू करने का समय प्राप्त करना चाहते हैं (2013 -02-19 00: 00: 00.000000-05: 00) और अंत समय (2013-02-19 23: 59: 59.9 99 99-05: 00)

  • एक बार मेरे पास ये मान हो, मैं चाहता हूं यूटीसी में वापस कनवर्ट करें, इसलिए मेरे पास एक उच्च और निम्न मूल्य है जो मैं अपने ईएसटी (मेरा टाइमज़ोन) सही कर सकता हूं।

यदि यह यह करने के लिए सबसे अच्छा तरीका नहीं है, या मैं कुछ याद कर रहा हूँ (मेरे लिए बहुत ज्यादा जटिल प्रतीत होता है) कृपया मेरी मदद रोशनी देख!

TIA

प्रति जवाब अपडेट:

d1 = datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz('America/New_York')) 
print d1.strftime("%m %d %Y") ; d2 = d1.replace(day=d1.day + 1) ; print d2.strftime("%m %d %Y") 

मुझे

02 20 2013 
02 21 2013 

कौन सा सही है दे देंगे कि। अब मुझे उस से पूर्ण ईएसटी समय उत्पन्न करने की आवश्यकता है और फिर यूटीसी में परिवर्तित करें। यह मैं समझ नहीं सकता। दरअसल, मैं संभवतः पूरा होने पर यूटीसी युग टाइमस्टैम्प में कनवर्ट करना चाहता हूं क्योंकि इससे मेरा डेटाबेस ऑपरेशन बहुत आसान हो जाएगा (<,> ,== आदि)।

+0

मुझे समझ में नहीं आता कि आप अभी क्या करने की कोशिश कर रहे हैं। मैंने सोचा था कि आप इस मामले में ईएसटी समय चाहते थे 02/20/2013 00:00 यूटीसी। आपका सभी कोड अभी एक जटिल तरीके से आजकल (और टॉमोरो) दिनांक प्राप्त करता है ... –

+0

(ईएसटी में, बूट करने के लिए, यूटीसी नहीं) –

+0

दिन को प्रतिस्थापित न करें। यह हर महीने के अंत में टूट जाएगा। मेरे जवाब के अनुसार timedelta का प्रयोग करें। इसके अलावा, एक पंक्ति में सब कुछ करने की कोशिश करना बंद करो। आपको मेरे उत्तर के "सबसे अधिक" का उपयोग नहीं करना चाहिए, आपको इसका * सभी * उपयोग करना चाहिए, जैसा कि यह है। उपरोक्त आपका कोड पढ़ने के लिए बहुत मुश्किल है। और अंत में, क्या आप * समय * का उपयोग नहीं कर रहे हैं?आप केवल तारीखों को प्रिंट कर रहे हैं। यदि आप समय नहीं चाहते हैं, तो इनमें से अधिकांश पूरी तरह से व्यर्थ है। शुरुआत के लिए तिथियों के पास कोई टाइमज़ोन नहीं है। –

उत्तर

18

यूटीसी के रूप में वर्तमान समय प्राप्त करने और इसे ईएसटी में परिवर्तित करने का पहला कदम थोड़ा व्यर्थ लगता है। क्या आप उस समय किसी भी चीज़ के लिए उपयोग करते हैं?

इसके अलावा यह अपेक्षाकृत कठोर लगता है। आप यूटीसी में एक दिन ईएसटी की शुरुआत और अंत प्राप्त करना चाहते हैं, इसलिए आप उन्हें बनाते हैं और उन्हें यूटीसी में परिवर्तित करते हैं। यह इतना जटिल नहीं है। :-)

हालांकि आप अपने मिलान करने वाले दिनचर्या को देखना चाहते हैं, ताकि आप आज की शुरुआत को कम मूल्य के रूप में और कल की शुरुआत को उच्च के रूप में उपयोग कर सकें, इसलिए आपको इससे निपटने की ज़रूरत नहीं है वह 23: 59: 59.9 999 समय।

अद्यतन:

सबसे पहले आप (वर्तमान दिनांक प्राप्त करना चाहते हैं के रूप में यह यूटीसी में है ईएसटी तो 11 में:

आपके प्रश्न के अपने मूल समझ से, यह है कि क्या आप क्या करना चाहते है 12st, आप 22 वीं चाहते हैं, के रूप में यह यूटीसी में 22 है तो।

>>> from datetime import datetime 
>>> today = datetime.utcnow().date() 
>>> today 
datetime.date(2013, 2, 21) 

दूसरी बात आप यूटीसी में उस दिन की 00:00:00 चाहते हैं, शुरुआत के रूप में एक खोज के लिए।

>>> from dateutil import tz 
>>> est = tz.gettz('America/New_York') 
>>> start = start.astimezone(est) 
>>> start 
datetime.datetime(2013, 2, 20, 19, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York')) 

और तुम भी अंत के रूप में कल चाहते हैं:

>>> from datetime import timedelta 
>>> end = start + timedelta(1) 
>>> end 
datetime.datetime(2013, 2, 21, 19, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York')) 

सारांश:

today = datetime.utcnow().date() 
start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()).astimezone(est) 
end = start + timedelta(1) 

>>> from dateutil import tz 
>>> start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()) 
datetime.datetime(2013, 2, 21, 0, 0, tzinfo=tzutc()) 
सिवाय इसके कि आप को पता है कि उस समय न्यूयॉर्क में है चाहता हूँ

+0

प्राप्त करने के साथ संघर्ष यह काम करने के लिए। मेरे पास मेरे ओपी के साथ अपडेट किया गया है। –

+0

@ श्री-स्क: अपडेटेड। –

+0

धन्यवाद - मैं इनमें से अधिकांश का उपयोग कर समाप्त हुआ। मैं अपना ओपी डब्ल्यू/उत्तर अपडेट करूंगा। –

5

मैं निश्चित रूप सेदे दूंगाआपकी समस्या को हल करने के लिए एक नज़र डालें, कुछ चरणों का पालन करेंगी।

आपको पहले अपने स्ट्रिंग पार्स करने की जरूरत है। डेलोरियन parse विधि का उत्कृष्ट उपयोग करें।

>>> from delorean import parse 
>>> d = parse("Wed, 20 Feb 2013 03:51:39 +0000") 
>>> d 
Delorean(datetime=2013-02-20 03:51:39+00:00, timezone=UTC) 

एक बार जब आप datetime है कि आप एक Delorean वस्तु में पार्स है तो आप बस ईएसटी

>>> d = d.shift('US/Eastern') 
>>> d 
Delorean(datetime=2013-02-19 22:51:39-05:00, timezone=US/Eastern) 

में बदलने का व्यर्थ यद्यपि। आप कभी भी अपने प्रश्न में किसी भी चीज के लिए इसका इस्तेमाल नहीं करते हैं, लेकिन डेलोरियन के साथ बहुत आसान है।

तो फिर तुम समय अब ​​ईएसटी

में Delorean आयात Delorean से

>>> d1 = Delorean(timezone="US/Eastern") 
>>> d1 
Delorean(datetime=2013-02-21 00:35:56.405256-05:00, timezone=US/Eastern) 

अब truncation कदम के लिए मिलता है।

>>> d.truncate('day') 
Delorean(datetime=2013-02-21 00:00:00-05:00, timezone=US/Eastern) 

ऊपर यूटीसी के रूप में सरल बदलाव करें।

अब दिन का अंत प्राप्त करें।

d = d.next_day(1) # move to the next day 

फिर एक सेकंड पीछे स्थानांतरित करने के लिए। लाइब्रेरी की ज़रूरत है कि मैं इसे अद्यतन कर रहा हूँ। उदाहरण से datetime विशेषता के साथ पूछकर बस डेटाटाइम प्राप्त करें।

d.datetime - timedelta(seconds=1) 
datetime.datetime(2013, 2, 21, 23, 59, 59, tzinfo=<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>) 

गुडलक, लेकिन अपने datetime संचालन :)

+0

@ श्रीमान-स्की इसे मदद करनी चाहिए! – myusuf3

+0

एक सेकंड पीछे शिफ्ट करें? यह दिन का अंत नहीं है, उस दिन एक पूरी दूसरी गायब है। या तो आप एक माइक्रोसेकंड को घटाते हैं, या आप 'if_datetime

0

बस इस में भाग गया, यहाँ है सबसे आसान विकल्प मैंने पाया के साथ काम कर बस चाहिए इस पुस्तकालय:

from delorean import Delorean 
today_d = Delorean() 
sod_dt = today_d.start_of_day 
eod_dt = today_d.end_of_day 
sod_d = Delorean(sod_dt) 
eod_d = Delorean(eod_dt) 
sod_e = sod_d.epoch 
eod_e = eod_d.epoch 

पुष्टि करने के लिए:

In [69]: eod_e - sod_e 
Out[69]: 86399.99999904633 

ज्यादातर लोगों

के लिए करीब पर्याप्त

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

  • कोई संबंधित समस्या नहीं^_^