यदि d = date(2011, 1, 1)
UTC में है:
>>> from datetime import datetime, date
>>> import calendar
>>> timestamp1 = calendar.timegm(d.timetuple())
>>> datetime.utcfromtimestamp(timestamp1)
datetime.datetime(2011, 1, 1, 0, 0)
यदि d
स्थानीय समय क्षेत्र में है:
>>> import time
>>> timestamp2 = time.mktime(d.timetuple()) # DO NOT USE IT WITH UTC DATE
>>> datetime.fromtimestamp(timestamp2)
datetime.datetime(2011, 1, 1, 0, 0)
timestamp1
और timestamp2
भिन्न हो सकता है यदि UTC में मध्यरात्रि के रूप में स्थानीय समयक्षेत्र में मध्यरात्रि समान समय उदाहरण नहीं है।
mktime()
यदि d
कोई अस्पष्ट स्थानीय समय (जैसे, डीएसटी संक्रमण के दौरान) से मेल खाता है या d
एक अतीत (भविष्य) की तारीख है, जब utc ऑफसेट अलग हो सकता है और C दिए गए प्लेटफॉर्म पर tz डेटाबेसmktime()
तक कोई पहुंच नहीं है , तो एक गलत परिणाम दे सकता है । आप हो सकता है का उपयोग (जैसे के माध्यम से मॉड्यूल ) सभी प्लेटफार्मों पर TZ डेटाबेस तक पहुँच प्राप्त करने । इसके अलावा, विफल हो सकता है और समय-समय पर उपयोग किए जाने पर गैर-पॉसिक्स टाइमस्टैम्प वापस कर सकता है ।pytz
tzlocal.get_localzone()
utcfromtimestamp()
mktime()
"right"
datetime.date
बिना यूटीसी में तारीख का प्रतिनिधित्व करने वाली वस्तु को परिवर्तित करने के लिए calendar.timegm()
:
DAY = 24*60*60 # POSIX day in seconds (exact value)
timestamp = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * DAY
timestamp = (utc_date - date(1970, 1, 1)).days * DAY
मैं यूटीसी के अनुसार युग के बाद से सेकंड में परिवर्तित तिथि कैसे प्राप्त कर सकता हूं?
परिवर्तित करने के लिए datetime.datetime
(नहीं datetime.date
) ऑब्जेक्ट जो पहले से ही UTC में संबंधित POSIX टाइमस्टैम्प (a float
) में समय का प्रतिनिधित्व करता है ।
पायथन 3.3+
datetime.timestamp()
:
from datetime import timezone
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
नोट: यह timezone.utc
स्पष्ट रूप से आपूर्ति करने के लिए आवश्यक है अन्यथा .timestamp()
मान लें कि आपकी भोली डेटाइम वस्तु स्थानीय समय क्षेत्र में है।
अजगर 3 (<3.3)
के लिए डॉक्स से datetime.utcfromtimestamp()
:
किसी टाइमस्टैम्प को डेटाइम उदाहरण से प्राप्त करने के लिए कोई विधि नहीं है, लेकिन डेटाइम उदाहरण के अनुरूप POSIX टाइमस्टैम्प की गणना आसानी से निम्न प्रकार से की जा सकती है। एक भोली के लिए:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
और एक जागरूक डीटी के लिए:
timestamp = (dt - datetime(1970,1,1, tzinfo=timezone.utc)) / timedelta(seconds=1)
दिलचस्प पढ़ें: युग का समय बनाम दिन का समय क्या समय के बीच अंतर है? और कितने सेकंड बीत चुके हैं?
यह भी देखें: डेटाइम को "युग" विधि की आवश्यकता है
अजगर २
पायथन 2 के लिए उपरोक्त कोड को अनुकूलित करने के लिए:
timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
जहां सक्षम सच विभाजन के साथ गणना के timedelta.total_seconds()
बराबर है (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
।
from __future__ import division
from datetime import datetime, timedelta
def totimestamp(dt, epoch=datetime(1970,1,1)):
td = dt - epoch
# return td.total_seconds()
return (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**6
now = datetime.utcnow()
print now
print totimestamp(now)
फ्लोटिंग-पॉइंट मुद्दों से सावधान रहें ।
उत्पादन
2012-01-08 15:34:10.022403
1326036850.02
datetime
POSIX टाइमस्टैम्प के लिए एक जागरूक वस्तु कैसे परिवर्तित करें
assert dt.tzinfo is not None and dt.utcoffset() is not None
timestamp = dt.timestamp() # Python 3.3+
पायथन 3 पर:
from datetime import datetime, timedelta, timezone
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
timestamp = (dt - epoch) / timedelta(seconds=1)
integer_timestamp = (dt - epoch) // timedelta(seconds=1)
पायथन 2 पर:
# utc time = local time - utc offset
utc_naive = dt.replace(tzinfo=None) - dt.utcoffset()
timestamp = (utc_naive - datetime(1970, 1, 1)).total_seconds()