2010-08-04 44 views
2

我想要做的是從日期中減去7小時。我搜索了堆棧溢出並找到了關於如何去做的答案here。然後我就去閱讀timedelta的文檔,因爲我無法理解在接受的答案是行不,這裏改寫爲便於:如何計算timedelta python

from datetime import datetime 

dt = datetime.strptime(date, '%Y-%m-%d %H:%M') 
dt_plus_25 = dt + datetime.timedelta(0, 2*60*60 + 30*60) 

不幸的是,即使是閱讀文檔後,我還是不明白如何該線路起作用。

什麼是timedelta行?它是如何工作的?

此外,在我發現這個stackoverflow後,我正在使用time.struct_time元組。我有一個變量TM:

tm = time.strptime(...) 

我只是通過tm.tm_hour訪問小時,減去七次取,但這種顯而易見的原因,不能正常工作。這就是爲什麼我現在試圖使用日期時間。現在有價值

tm = datetime.strptime(...) 

我假設使用日期時間是減去七小時的最佳途徑?

注意:因爲我想從UTC到美國/太平洋時區,因此減去7小時。有沒有內置的方法來做到這一點?

回答

2

What is the timedelta line doing? How does it work?

它創建一個timedelta對象。

「時間」有兩種含義。

  • 「時間點」(即,日期或日期時間)

  • 「持續時間」 或間隔或 「時間增量」

甲時間增量爲間隔,持續時間,一段時間。你提供了3個值。

  • 0天。

  • 2 * 60 * 60 + 30 * 60秒。

+0

當我使用datetime.timedelta(...),我得到一個錯誤:AttributeError:類型對象'datetime.datetime'沒有屬性'timedelta'。這是爲什麼發生?我從日期時間導入日期時間 – laleto 2010-08-04 22:57:56

+0

@laleto導入使用。這是一個不同的問題。用**真**代碼和**真**錯誤更新你的問題,你真的**得到。 – 2010-08-04 22:59:10

+0

那麼你回答了我的原始問題,並在此後產生。我通過從datetime導入timedelta中添加另一個導入語句來解決此問題。 – laleto 2010-08-04 23:02:38

1

timedelta()生成一個表示時間量的對象 - 希臘字母delta用於數學表示「差異」。因此,要計算一段時間的加法或減法,您需要開始時間並添加所需的更改或增量。

您引用的具體調用是用於生成2.5小時的timedelta。第一個參數是天,第二個是秒,所以你有(0天,2.5小時),2.5小時(秒)是(2小時* 60分鐘/小時* 60秒/分鐘)+(30分鐘* 60秒/分鐘)。

對於你的情況,你必須爲0天,7小時的負時間差,所以你會寫:

timedelta(0, -7 * 60 * 60) 

...或timedelta(0,-7 * 3600)或任何品牌它清楚你在做什麼。

1

Note: subtracting seven hours because I want to go from UTC to US/Pacific timezone. Is there a built-in way to do this?

是的,有:datetime有內置的時區轉換功能。如果使用這樣的事情讓你datetime對象:

tm = datetime.strptime(date_string, '%Y-%m-%d %H:%M') 

它不會有什麼特別的時區,在第一個「附加」到它,但你可以給它使用

tm_utc = tm.replace(tzinfo=pytz.UTC) 

一個時區。然後你可以將它轉換爲美國/太平洋地區,我會建議這樣做,而不是手動減去7小時,因爲它明確指出你要保留實際的時間同樣的,只是把它轉換到不同的時區,而如果你手動減去七個小時,看起來更像是你實際上試圖讓過去七個小時。此外,時區轉換正確處理夏時制等古怪事情。

爲此,您需要安裝pytz軟件包,該軟件包未包含在Python標準庫中。