モデルのクラスがあるとしましょう
class Post(models.Model):
time_posted = models.DateTimeField(auto_now_add=True, blank=True)
def get_time_diff(self):
timediff = timediff = datetime.datetime.now() - self.time_posted
print timediff # this line is never executed
return timediff
私はget_time_diffを定義して、投稿が投稿されてから現在までの時差を取得しています。ドキュメントによると、DateTimeFieldは自動的にdatetimeに変換できるはずです。正しいですか。なぜprintステートメントが実行されないのですか?どのようにして時差を抽出できますか?
加えて、時間差を取得する場合、合計時間の秒数のように、時間差を整数に変換する簡単な方法があります。
コードはすでに機能しています。 _datetime.timedelta
_オブジェクト が返されます。
代わりに秒の合計数を取得するには、結果の .total_seconds()
method を呼び出す必要がありますtimedelta
:
_from Django.utils.timezone import utc
def get_time_diff(self):
if self.time_posted:
now = datetime.datetime.utcnow().replace(tzinfo=utc)
timediff = now - self.time_posted
return timediff.total_seconds()
_
.total_seconds()
は、マイクロ秒を含むfloat
値を返します。
Django datetime
はタイムゾーン対応DateTimeField
オブジェクトも処理するため、timezone awaredatetime
オブジェクトを使用する必要があることに注意してください。 Django Timezonesのドキュメント を参照してください。
.total_seconds()
のデモ(単純なdatetime
オブジェクトを使用しますが、原理は同じです):
_>>> import datetime
>>> time_posted = datetime.datetime(2013, 3, 31, 12, 55, 10)
>>> timediff = datetime.datetime.now() - time_posted
>>> timediff.total_seconds()
1304529.299168
_
両方のオブジェクトはタイムゾーンに対応している(_.tzinfo
_属性がNone
ではない)ため、それらの間の計算はタイムゾーンを処理し、どちらか一方のタイムゾーンを考慮に入れると、一方から他方を差し引くと正しく動作しますオブジェクト。
Django=シグナルです。これが私のために働いているものです。これが役に立てば幸いです!
from Django.db.models.signals import pre_save
from Django.dispatch import receiver
from .models import YourModel
from datetime import datetime
@receiver(pre_save, sender = YourModel)
def beforeSave(sender, instance, **kwargs):
date_format = "%H:%M:%S"
# Getting the instances in your model.
time_start = str(instance.time_start)
time_end = str(instance.time_end)
# Now to get the time difference.
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)
# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;
あなたのコード
timediff = datetime.datetime.now() - self.pub_date
時間差を取得するために動作するはずです。ただし、これは timedelta
オブジェクトを返します。秒単位で差を取得するには、.seconds
属性を使用します
timediff = datetime.datetime.now() - self.pub_date
timediff.seconds # difference in seconds.