2011-11-23 98 views
8

Python的datetime類有一個fromtimestamp方法來創建一個時間戳datetime對象,但不提供其他方式輪一個totimestamp方法...... 我知道,喜歡的東西time.mktime(x.timetuple())你可以轉換datetime對象到一個時間戳,但這看起來不是很複雜,所以我很好奇爲什麼沒有totimestamp方法?爲什麼python datetime類有'fromtimestamp'方法,但不是'totimestamp'方法?

+0

參見http://stackoverflow.com/questions/8022161/python-converting-from-datetime -datetime-to-time-time –

+0

@Sven:我的問題不是要求轉換它的方法,而是想知道在'datetime'模塊中缺少這種方法的原因... –

+1

我didn不要說這是重複的。我只是鏈接了相關的信息,這對從Google訪問此頁面的人來說總是有用。 –

回答

13

我確實記得有關這件事的discussion/bug report,當我回想這段時間的想法。長話短說:提出了很多建議,但由於某種原因,沒有人接受。

關鍵是我覺得最好的this reply總結:

大量提出了一個滿意的解決方案。沒有人提出一個令你滿意的解決方案,因爲你已經過度限制了這個問題。在這麼多年之後,我們仍然沒有utctotimestamp()的原因在於,就我所知,您和您單獨拒絕接受一種方法,該方法在工作範圍內以微秒精度反轉utcfromtimestamp()。這種方法是一個完全合理和可接受的解決方案,並且會爲Python作爲一種語言增加很多價值。

我懷疑你沒有意識到你有多麼痛苦無意中造成了Python用戶的世界,因爲他們單方面阻止了這個問題的進展。我見過他們:學生,朋友,同事 - 即使是非常聰明,有能力的人也會受到阻礙。沒有人想到看日曆模塊。也許如果你看到他們中的一些人與此鬥爭,你會明白。

最終結果這個故事是documentation was added如何做到這一點吧:

# On the POSIX compliant platforms, `utcfromtimestamp(timestamp)` is 
# equivalent to the following expression: 
datetime(1970, 1, 1) + timedelta(seconds=timestamp) 

# There is no method to obtain the timestamp from a `datetime` instance, 
# but POSIX timestamp corresponding to a `datetime` instance `dt` can be 
# easily calculated as follows. For a naive `dt`: 
timestamp = (dt - datetime(1970, 1, 1))/timedelta(seconds=1) 

# And for an aware ``dt``:: 
timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc))/timedelta(seconds=1) 
相關問題