2008-10-26 54 views
1

我有一些單元測試在夏令時切換後開始失敗。夏令時更改影響保存和加載icalendar文件的結果?

我們使用iCalendar python module來加載和保存ics文件。

以下腳本是我們測試的簡化版本。從今天上午開始,劇本在'夏天'中運行良好,'冬天'失敗。通過手動設置時鐘可以複製故障。這裏是腳本的輸出:

[[email protected] icalendar]# date 10250855 
Sat Oct 25 08:55:00 CEST 2008 
[[email protected] icalendar]# python dst.py 
DTSTART should represent datetime.datetime(2015, 4, 4, 8, 0, tzinfo=tzfile('/usr/share/zoneinfo/Europe/Brussels')) Brussels time 
DTSTART should represent datetime.datetime(2015, 4, 4, 6, 0, tzinfo=<icalendar.prop.UTC object at 0x956b5cc>) UTC 
DTSTART represents datetime.datetime(2015, 4, 4, 6, 0, tzinfo=<icalendar.prop.UTC object at 0x956b5cc>) Brussels time 
[[email protected] icalendar]# date 10260855 
Sun Oct 26 08:55:00 CET 2008 
[[email protected] icalendar]# python dst.py 
DTSTART should represent datetime.datetime(2015, 4, 4, 8, 0, tzinfo=tzfile('/usr/share/zoneinfo/Europe/Brussels')) Brussels time 
DTSTART should represent datetime.datetime(2015, 4, 4, 6, 0, tzinfo=<icalendar.prop.UTC object at 0x96615cc>) UTC 
DTSTART represents datetime.datetime(2015, 4, 4, 7, 0, tzinfo=<icalendar.prop.UTC object at 0x96615cc>) Brussels time 
Traceback (most recent call last): 
    File "dst.py", line 58, in <module> 
    start.dt, startUTCExpected) 
AssertionError: calendar's datetime.datetime(2015, 4, 4, 7, 0, tzinfo=<icalendar.prop.UTC object at 0x96615cc>) != expected datetime.datetime(2015, 4, 4, 6, 0, tzinfo=<icalendar.prop.UTC object at 0x96615cc>) 

而這裏是whole script

因此,問題: - 爲什麼我當前的時間(以及我所在的DST的哪一部分)影響加載/保存/時間戳分析?我希望它不會。 - 你會如何測試這種錯誤,如果它是一個錯誤?顯然,我不希望我的單元測試重置計算機上的時鐘。

+0

我已經看到近8年這種單元測試和時區/ TZ + DST的麻煩。我真的很好奇這個問題會得到更通用的答案(如何準備通過DST更改進行穩定的單元測試) – Jonke 2008-10-26 09:13:57

回答

1

不看你的代碼(和我引用的測試運行腳本現在我的大腦不能理解) 我注意到你試圖得到一個與你所在的時區不同的時區。 (將DST視爲另一個TIMEZONE,而不是當前時區+1小時)。 這可能(取決於你如何做)導致小時數的增加或減少。 (就像你的飛行一樣,你開始一次,在你開始之前到達你的位置,所有在當地時間)