Django datetime.timedelta,如果它们可能是不同的集合,那么它如何从timezone.now()中减去

2024-06-07 04:06:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法理解以下功能:

time = timezone.now() - datetime.timedelta(days=30)

首先,timezone.now()给出了Django中设置的时间…现在是datetime.timedelta(days=30)

它是否将django中的内部设置用作set setting.py或其他设置。

第二,如果是的话…应该是:变量时间不比当前时区晚30天

在下面的函数中

def test_was_published_recently_with_old_question(self):
    """
    was_published_recently() should return False for questions whose
    pub_date is older than 1 day.
    """
    time = timezone.now() - datetime.timedelta(days=30)
    old_question = Question(pub_date=time)
    self.assertEqual(old_question.was_published_recently(), False)

这怎么会让我大一天…我想我的问题是不理解

完全地

我非常感谢你的帮助。我是python和中级程序员的新手……但没有花太多时间。


Tags: selffalsedatetimetime时间daysnowold
3条回答

我认为你对测试方法的描述感到困惑。

这个测试方法通过不返回那些超过1天的问题来测试was_published_recently()是否正确工作。

为了测试它,他们所做的是将post的日期设置为比今天少30天(即- datetime.timedelta(days=30)),然后检查该post的was_published_today()是真是假。

如果它是假的,那么测试就通过了。

Firstly the timezone.now() gives the time that is set in Django … now the datetime.timedelta(days=30)

does it use the internal settings in django as set setting.py or another.

首先timezone.now()只是datetime.datetime.now()的一个“改进”版本,它也可以识别时区。

timezone.now()
>>> datetime.datetime(2015, 9, 10, 19, 45, 34, 105121, tzinfo=<UTC>)
datetime.datetime.now()
>>> datetime.datetime(2015, 9, 10, 19, 45, 48, 356860)

没有django内部时间。timezone.now()实际上就是datetime函数+时区。


timedelta那只是一个区别,一个物理上使用的三角形。它对时间一无所知。

当你从一个时间减去/加上一个增量时,你会根据时间做相应的事情。

所以今天是2015-09-10。如果你加上一天(timedelta(days=1)),那显然是2015年9月11日。

检查python中的某个内容是否比一个月新,方法是从现在开始减去30天(如果您愿意,可以减去1个月),然后比较节省的时间是否比这段时间大。


为了更好地理解日期时间比较,可以使用timestamp()函数将它们转换为unixtime,并将这些抽象的东西看作简单的数字:

one_month_ago = (timezone.now() - datetime.timedelta(days=30)).timestamp()
now = timezone.now().timestamp()
print(one_month_ago)
print(now)
if one_month_ago < now:
    print("a month ago is smaller")

输出

1439323463.786164
1441915463.786201
a month ago is smaller

在不转换为时间戳打印的情况下执行此操作a month ago is smaller

Firstly the timezone.now() gives the time that is set in Django … now the datetime.timedelta(days=30)

does it use the internal settings in django as set setting.py or another.

首先timezone.now()只是datetime.datetime.now()的一个“改进”版本,它也可以识别时区。

timezone.now()
>>> datetime.datetime(2015, 9, 10, 19, 45, 34, 105121, tzinfo=<UTC>)
datetime.datetime.now()
>>> datetime.datetime(2015, 9, 10, 19, 45, 48, 356860)

没有django内部时间。timezone.now()实际上就是datetime函数+时区。


timedelta那只是一个区别,一个物理上使用的三角形。它对时间一无所知。

当你从一个时间减去/加上一个增量时,你会根据时间做相应的事情。

所以今天是2015-09-10。如果你加上一天(timedelta(days=1)),那显然是2015年9月11日。

检查python中的某个内容是否比一个月新,方法是从现在开始减去30天(如果您愿意,可以减去1个月),然后比较节省的时间是否比这段时间大。


为了更好地理解日期时间比较,可以使用timestamp()函数将其转换为unixtime,并将这些抽象的内容看作简单的数字:

one_month_ago = (timezone.now() - datetime.timedelta(days=30)).timestamp()
now = timezone.now().timestamp()
print(one_month_ago)
print(now)
if one_month_ago < now:
    print("a month ago is smaller")

输出

1439323463.786164
1441915463.786201
a month ago is smaller

在不转换为时间戳打印的情况下执行此操作a month ago is smaller

相关问题 更多 >