/ / django 1.4 timezone.now () बनाम datetime.datetime.now () - django, timezone

django 1.4 timezone.now () बनाम datetime.datetime.now () - django, timezone

मैं डेलाइट बचत हैंडलिंग द्वारा थोड़ा उलझन में हूँ

settings.py:

TIME_ZONE = "Europe/London"
USE_TZ = True

django खोल में:

>>> from django.utils import timezone
>>> import datetime
>>> print timezone.now()
2012-05-28 11:19:42.897000+00:00
>>> print timezone.make_aware(datetime.datetime.now(),timezone.get_default_timez
one())
2012-05-28 12:20:03.224000+01:00

डेलाइट बचत के संबंध में वे समान क्यों नहीं हैं? दोनों को स्थानीय अवगत होना चाहिए, नहीं?

मैंने दस्तावेज़ों को पढ़ा है लेकिन कोई भी बुद्धिमान नहीं हूं।

उत्तर:

उत्तर № 1 के लिए 54

इसके अनुसार timezone.now():

def now():
"""
Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()

यह पर आधारित है utc आपके डिफ़ॉल्ट टाइमज़ोन के बजाय। आप उपयोग करके एक ही मूल्य प्राप्त कर सकते हैं

now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)

जवाब के लिए 5 № 2

चूंकि Django 1.11 आप बस कॉल कर सकते हैं django.utils.timezone.localtime लाना datetime आपके डिफ़ॉल्ट टाइमज़ोन के लिए।

>>> from django.utils import timezone
>>> timezone.localtime()

दस्तावेज़ों से:

वर्तमान समय क्षेत्र डिफ़ॉल्ट रूप से, एक अलग समय क्षेत्र में एक जागरूक डेटाटाइम को परिवर्तित करता है।

जब मान छोड़ा जाता है, तो यह डिफ़ॉल्ट होता है now().

यह फ़ंक्शन बेवकूफ डेटाटाइम पर काम नहीं करता है; उपयोग make_aware() बजाय।


जवाब के लिए 0 № 3
from datetime import datetime
from django.utils import timezone

def now():
try:
return timezone.localtime(timezone.now()).strftime("%Y-%m-%dT%H:%M:%S")

except Exception as exp:
print("TimeZone is not set - {}".format(exp))
return datetime.now().strftime("%Y-%m-%dT%H:%M:%S")

यदि आप सेट करते हैं TIME_ZONE = "Europe/London" तथा USE_TZ = True Django सेटिंग में, आप में जगह होगी try खंड और अन्य में, में except अनुभाग।


[ध्यान दें]:

  • .strftime() एक विकल्प है
  • इन पर परीक्षण किया Python 2.7 तथा Django 1.11