में कंप्यूटर के यूटीसी ऑफसेट प्राप्त करना पाइथन में, आप कैसे पाते हैं कि यूटीसी समय कंप्यूटर को ऑफसेट करने के लिए सेट किया गया है?पायथन
पायथन
उत्तर
gmtime()
यूटीसी समय लौटाएगा और localtime()
स्थानीय समय लौटाएगा ताकि दोनों को घटाकर आपको यूटीसी ऑफ़सेट देना चाहिए।
import time
print -time.timezone
यह यूटीसी सेकंड (खाते डेलाइट सेविंग टाइम (डीएसटी में रखना) में ऑफसेट time.altzone देखने के प्रिंट:
is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)
जहां ऑफसेट यूटीसी के माध्यम से परिभाषित किया गया है: "प्राप्त करने के लिए स्थानीय समय, यूटीसी समय में यूटीसी ऑफसेट जोड़ें। "
पायथन 3.3+ में tm_gmtoff
attribute है यदि अंतर्निहित सी लाइब्रेरी इसका समर्थन करता है:
utc_offset = time.localtime().tm_gmtoff
नोट: time.daylight
some edge cases में एक गलत परिणाम दे सकता है। ,
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
वर्तमान यूटीसी एक तरीका है कि time.daylight
मुद्दा workarounds और कहा कि काम करता है, भले ही tm_gmtoff
उपलब्ध नहीं है में ऑफसेट पाने के लिए:
tm_gmtoff
दिनांक द्वारा स्वचालित रूप से प्रयोग किया जाता है अगर यह अजगर पर उपलब्ध है 3.3+ @jts's suggestion स्थानीय और UTC समय substruct के लिए इस्तेमाल किया जा सकता है:
import time
from datetime import datetime
ts = time.time()
utc_offset = (datetime.fromtimestamp(ts) -
datetime.utcfromtimestamp(ts)).total_seconds()
प्राप्त करने के लिए यूटीसी पिछले/भविष्य दिनांकों ऑफसेट, pytz
समय-क्षेत्रों में इस्तेमाल किया जा सकता है:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone() # local timezone
d = datetime.now(tz) # or some other local date
utc_offset = d.utcoffset().total_seconds()
यह डीएसटी संक्रमण के दौरान काम करता है, यह अतीत के लिए काम करता है/भविष्य तारीखें भले ही स्थानीय समय क्षेत्र 2010-2015 की अवधि में समय उदाहरण के लिए, यूरोप/मास्को समयक्षेत्र पर ऑफसेट विभिन्न यूटीसी था।
यह अच्छा और साफ है। – Rockallite
सुपर सहायक। धन्यवाद, जेएफ –
ध्यान दें कि 'total_seconds()' केवल पायथन 3.2+ में उपलब्ध है। – mattst
मुझे पसंद है:
>>> strftime('%z')
'-0700'
मैं जेटीएस 'जवाब की कोशिश की पहले, लेकिन यह मुझे गलत परिणाम दे दी है। मैं अब -0700 में हूं, लेकिन यह कह रहा था कि मैं -0800 में था। लेकिन मुझे कुछ रूपांतरण करना पड़ता था इससे पहले कि मैं कुछ घटा सकूं, इसलिए शायद गलत गलत से अधिक अधूरा था।
''% z'' पायथन द्वारा समर्थित नहीं है (यह कुछ सिस्टम पर काम कर सकता है जहां आप संभवतः' time.localtime()। Tm_gmtoff' का उपयोग कर सकते हैं, यूटीसी ऑफ़सेट को संख्या के रूप में प्राप्त करने के लिए, स्ट्रिंग नहीं)। परिणाम ('% z'') का होना @jts के उत्तर के समान होना चाहिए। यदि आप अन्यथा सोचते हैं तो अपना कोड शामिल करें। – jfs
आयात समय time0 = time.time() utc_time = time.mktime (time.gmtime (time0)) LOCAL_TIME = time.mktime (time.localtime (time0)) ऑफसेट = LOCAL_TIME - utc_time प्रिंट (ऑफसेट/(60 * 60)) देता है -8। – dstromberg
1. टिप्पणियों में कोड न डालें, इसके बजाय अपना उत्तर अपडेट करें 2. mktime() का उपयोग करना गलत है, अंतर – jfs
यहां कुछ पायथन 3 कोड है जो बस समय और आयात के रूप में समय के साथ है। HTH
>>> from datetime import datetime
>>> import time
>>> def date2iso(thedate):
... strdate = thedate.strftime("%Y-%m-%dT%H:%M:%S")
... minute = (time.localtime().tm_gmtoff/60) % 60
... hour = ((time.localtime().tm_gmtoff/60) - minute)/60
... utcoffset = "%.2d%.2d" %(hour, minute)
... if utcoffset[0] != '-':
... utcoffset = '+' + utcoffset
... return strdate + utcoffset
...
>>> date2iso(datetime.fromtimestamp(time.time()))
'2015-04-06T23:56:30-0400'
यह मेरे लिए काम करता है:
if time.daylight > 0:
return time.altzone
else:
return time.timezone
अंतर खोजने के लिए 'calendar.timegm()' या 'डेटाटाइम()' का उपयोग करें। गलत। नोटिस: ['time.localtime()। Tm_isdst> 0' मेरे उत्तर में एक समान कोड में] (http://stackoverflow.com/a/3168394/4279) – jfs
क्षमा करें, आपकी पोस्ट इतनी लंबी है और पूर्ण है कि मैं करता हूं समझा नहीं है कि वही जवाब है। मेरी पोस्ट निश्चित रूप से एक ही समाधान का एक छोटा संस्करण है। – Alecs
नहीं, कोड गलत है। 'time.daylight' यह नहीं कहता कि गर्मी का समय अभी है या नहीं। यह कहता है कि स्थानीय समय में डीएसटी हो सकती है। यही कारण है कि आपको 'time.localtime()। Tm_isdst' को कॉल करना होगा – jfs
शानदार! मुझे सरल सोचने की जरूरत है :) – Paul
यह यहां कुछ सुरुचिपूर्ण सादगी है। –
उन्हें घटाना 'टाइप एरर: असमर्थित ऑपरेंड प्रकार (-) के लिए -' time.struct_time 'और' time.struct_time'' देता है। आप वास्तव में क्या मतलब था? – rakslice