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

Cur*_*bda 5 python django datetime

我无法理解使用的函数:

time = timezone.now() - datetime.timedelta(days=30)
Run Code Online (Sandbox Code Playgroud)

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

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

其次如果是......应该:变量时间不是当前时区后30天.now();

在下面的功能中

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)
Run Code Online (Sandbox Code Playgroud)

这怎么会产生1天大...我认为我的问题不是理解

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

我真的很感激帮助.我是python和med级程序员的新手......但是时间不长.

Chr*_*ers 6

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

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

首先,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)
Run Code Online (Sandbox Code Playgroud)

没有django内部时间.timezone.now()实际上只是日期时间函数+时区.


timedelta然后只是一个差异,一个在物理学中使用的三角洲.它对时间一无所知.

从您执行相应事物的时间到时间减去/添加增量时.

所以今天是2015-09-10.如果你添加一天(timedelta(days=1))显然是2015-09-11.

支票是否东西比Python中的一个月是从现在开始从其减去30天(或1个月,如果你喜欢),然后比较,如果节省的时间是做的是更近的更大的比.


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

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")
Run Code Online (Sandbox Code Playgroud)

输出

1439323463.786164
1441915463.786201
a month ago is smaller
Run Code Online (Sandbox Code Playgroud)

这样做也可以不转换为时间戳a month ago is smaller.

  • [除非`USE_TZ=True`; `timezone.now()` 可能会返回一个简单的日期时间对象](https://docs.djangoproject.com/en/1.8/_modules/django/utils/timezone/#now) (3认同)

Bur*_*lid 1

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

此测试方法was_published_recently()通过不返回超过 1 天的问题来测试是否正常工作。

为了测试它,他们正在做的是将帖子的日期设置为比今天少 30 天(即 )- datetime.timedelta(days=30),然后检查was_published_today()该帖子的值为 True 或 False。

如果为 False,则测试通过。