मैं डेलाइट बचत हैंडलिंग द्वारा थोड़ा उलझन में हूँ
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