नीचे मैंने अनिवार्य रूप से utcfromtimestamp
(मैंने इसे थोड़ा सा स्टैंडअलोन में संशोधित किया है) शामिल किया है।
अजगर 2 में:
import time, datetime
def utcfromtimestamp(t):
y, m, d, hh, mm, ss, weekday, jday, dst = time.gmtime(t)
us = int((t % 1.0) * 1000000)
ss = min(ss, 59)
return datetime.datetime(y, m, d, hh, mm, ss, us)
अजगर 3 में:
import time, datetime
def utcfromtimestamp(t):
t, frac = divmod(t, 1.0)
us = int(frac * 1e6)
if us == 1000000:
t += 1
us = 0
y, m, d, hh, mm, ss, weekday, jday, dst = time.gmtime(t)
ss = min(ss, 59)
return datetime.datetime(y, m, d, hh, mm, ss, us)
(इनपुट 1000000000005.0/1000.0
1000000000.005
लिए गणना की जाती है।)
मेरी स्टैंडअलोन संस्करण में:
अजगर 2 मॉड्यूलस ऑपरेटर %
का उपयोग करता है निर्धारित करें कि इनपुट एक पूर्ण संख्या या एक अंश है या नहीं। कथन (t % 1.0) * 1000000
तब 1000000
द्वारा अंश (हमारे मामले 0.004999995231628418
में) को गुणा करता है। यह 4999.995231628418
देता है, जो 4999
पर int
तक गोल किया गया है।
अजगर 3 divmod
का उपयोग करता है पूरी संख्या (t
) 1000000000.0
और अंश (frac
) 0.005
वापस जाने के लिए। इसे वापस करने के बजाय, यह t
1000000000
और frac
0.004999995231628418
के रूप में देता है। यह frac * 1e6
का उपयोग कर us
की गणना करने के लिए चला जाता है। यह 1000000
से 4999.995231628418
गुणा कर रहा है, जिसके परिणामस्वरूप 4999
int
तक गोल किया गया है।
उपयोग की जाने वाली विधियों में कोई वास्तविक अंतर नहीं है। दोनों सटीक हैं और एक ही परिणाम लौटते हैं। मेरा निष्कर्ष यह है कि पायथन 2 माइक्रोसॉन्ड को गोलाकार कर रहा है, जबकि पायथन 3 उन्हें गोल कर रहा है।
दिलचस्प खोज। क्या आप अपना ओएस, पायथन sys.version पोस्ट कर सकते हैं? – dmg
@ डीएमजी मैंने इसका परीक्षण पाइथन 3.4.1, 3.4.2, लिनक्स और विंडोज 7 पर किया है। – simonzack
यह निश्चित रूप से करना है कि पाइथन 3 में राउंडिंग कैसे किया जाता है, यदि आप 5 से नीचे के किसी भी मान का उपयोग करते हैं और मूल्यों के लिए> 5 –