2015-07-10 64 views
0

我保存了最後一次訪問頁面,並且自升級到Django 1.8以來,我所有的日期都變得詭異......我真的,真的不知道它。Django的timezone.怪異行爲()

我基本上有一個API,它被設置在美國各地的自助服務終端電腦戳到,但是我想知道是否在某個時間點亭子在最近3分鐘內登記過了。我不在乎它在哪個時區。

我有一個簡單DateTimeField字段:

lastcheckintime = models.DateTimeField(blank=True, null=True, auto_now=False) 

而當API被調用時,我只需保存此:

monitor.lastcheckintime = timezone.now() 

隨着調試日誌,看起來像它的保存在正確的UTC時間數據庫。我正在檢查一臺顯示器是否在線:

@property 
def is_online(self): 
    if self.lastcheckintime is None: 
     return False 

    time_threshold = timezone.now() - timedelta(minutes=3) 
    return self.lastcheckintime > time_threshold 

它曾經是完美的,直到我升級。我不知道它是Django的的1.8或pytz本身的升級,但現在看起來是這樣的:

Last 3 lines are wonky

(在我的時區是下午10點29分)

而且怪異的一部分這些線是否改變!並不總是在錯誤的時間顯示器。此外,整個事情是關閉了7個小時(我格林威治標準時-7)。任何其他模型看起來工作正常,我完全失去了爲什麼這個行爲不正常。

對我可能錯過的東西有任何想法?

謝謝!

+2

我想不出在1.8版本中會有什麼變化導致這種情況。 'USE_TZ'的價值是什麼?您看到的行爲看起來像是從'USE_TZ = True'變爲'USE_TZ = False'。 –

+0

[''timezone.now()'源代碼](https://github.com/django/django/blob/2e05ef4e18c8fea0c199e4fc32278cce11158ac0/django/utils/timezone.py#L316)也暗示'settings.USE_TZ'可能有在你的環境中改變。 – jfs

+0

我的USE_TZ仍然設置爲true。在我的情況下,每個設備的時區無關緊要? (無論如何,它們應該全部在同一個中) –

回答

0

仍然無法理解發生了什麼,但我最終創建了具有確切屬性的另一個datetimefield,並使用這個datetimefield來代替,刪除舊的lastcheckintime並且一切正常。

這仍然是一個謎... 謝謝!