Amer Abdallah نشر 14 سبتمبر 2021 أرسل تقرير نشر 14 سبتمبر 2021 أحاول أن أقارن بين التاريخ والوقت الحاليين بالتواريخ والأوقات المحددة في النماذج باستخدام عوامل المقارنة كالتالي: if post.datetime_start <= datetime.now() <= post.datetime_end: لكن يظهر لي الخطأ التالي: TypeError: can't compare offset-naive and offset-aware datetimes تبدو الحقول في النموذج الذي لدي كما يلي: class Post(models.Model): name = models.CharField(max_length=255) datetime_start = models.DateTimeField() datetime_end = models.DateTimeField() كما أني لم أتمكن من معرفة صيغة الوقت والتاريخ التي يستخدمها جانغو Django للحقل DateTimeField. هل هي من نوع naive أم aware؟ 1 اقتباس
1 سامح أشرف نشر 14 سبتمبر 2021 أرسل تقرير نشر 14 سبتمبر 2021 بشكل افتراضي، يكون كائن التاريخ والوقت في Python من نوع naive، لذلك تحتاج إلى جعل كلاهما إما كائنات naive أو aware. ويمكن القيام بذلك باستخدام: import datetime import pytz utc = pytz.UTC post.datetime_start = utc.localize(post.datetime_start) post.datetime_end = utc.localize(post.datetime_end) # الآن كلا الحقلين من نوع aware, ويمكن المقارنة بينهما كما أن جانغو Django يقدم طريقة سهلة لكي تحصل على الوقت والتاريخ الحاليين بنفس الصيغة التي يستعملها من خلال التبع datetime.datetime.now، على النحو التالي: from django.utils import timezone now = timezone.now() كما يمكنك أن تقوم بتحويل الوقت والتاريخ من صيغة UNIX من خلال الكائن datetime.datetime، كالتالي: unix_time = int(unix_timestamp) d = datetime.datetime.utcfromtimestamp(unix_time) d_with_tz = datetime.datetime( year = d.year, month = d.month, day = d.day, hour = d.hour, minute = d.minute, second = d.second, tzinfo = pytz.UTC) 2 اقتباس
0 Ali Haidar Ahmad نشر 14 سبتمبر 2021 أرسل تقرير نشر 14 سبتمبر 2021 بدايةً كتوضيح بسيط.. هناك نوعان من كائنات الوقت والتاريخ: "الواعي aware" و "البسيط naive". يمتلك الكائن الواعي معرفة كافية بالعمليات الحسابية والتعديلات الدولية على الأوقات، كالمناطق الزمنية والتوقيت الصيفي، وتعديل القيمة الخاصّة به بصورة تتناسب مع الكائنات الواعية الأخرى. يستخدم الكائن الواعي لتمثيل فترة زمنية معيّنة غير مفتوحة للتفسير. أما الكائن البسيط فلا يمتلك المعلومات الكافية ليضع نفسه في المكان الصحيح نسبة إلى كائنات الوقت أو التاريخ الأخرى. تعتمد القيمة التي يمثّلها الكائن البسيط، سواء أكانت التوقيت العالمي المنسق (Coordinated Universal Time UTC) أو التوقيت المحلي، أو التوقيت في منطقة زمنية أخرى، تعتمد هذه القيمة بصورة تامة على البرنامج، وهو المسؤول الوحيد عن تمثيل رقم معيّن للأمتار أو الأميال أو الكتلة. بالنسبة لكائن datetime فهو من النوع البسيط. ولمزيد من التفاصيل يمكنك زيارة الرابط التالي:https://wiki.hsoub.com/Python/datetime#.D8.A7.D9.84.D8.B5.D9.86.D9.81_datetime.date أما بالنسبة للمشكلة فيجب عليك إضافة معلومات المنطقة الزمنية إلى datetime.now: # aware_variable معلومات المنطقة الزمنية لل timezone = your_timezone_aware_variable.tzinfo # التاريخ والوقت الحالي للمنطقة الزمنية للمتغير الخاص بك now_in_timezone = datetime.datetime.now(timezone) #يمكنك الآن إجراء مقارنة بينهما، فكل من متغيري التاريخ والوقت لهما نفس المنطقة الزمنية if your_timezone_aware_variable <= now_in_timezone: pass ويمكنك اختصار ماسبق بسطر واحد: if timezone_aware_var <= datetime.datetime.now(timezone_aware_var.tzinfo): pass 1 اقتباس
0 محمد أبو عواد نشر 15 سبتمبر 2021 أرسل تقرير نشر 15 سبتمبر 2021 قم بتعطيل المنطقة الزمنية باستخدام السطر التالي challenge.datetime_start.replace(tzinfo=None); يمكنك أيضا استخدام replace(tzinfo=None) لتاريخ ووقت آخر كالتالي if challenge.datetime_start.replace(tzinfo=None) <= datetime.now().replace(tzinfo=None) <= challenge.datetime_end.replace(tzinfo=None): اقتباس
السؤال
Amer Abdallah
أحاول أن أقارن بين التاريخ والوقت الحاليين بالتواريخ والأوقات المحددة في النماذج باستخدام عوامل المقارنة كالتالي:
لكن يظهر لي الخطأ التالي:
تبدو الحقول في النموذج الذي لدي كما يلي:
كما أني لم أتمكن من معرفة صيغة الوقت والتاريخ التي يستخدمها جانغو Django للحقل DateTimeField. هل هي من نوع naive أم aware؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.