我有一個值38142我需要使用python將其轉換爲日期格式。 如果在excel中使用這個數字,並在那時做一個右鍵點擊和格式化單元格的值將被轉換爲04/06/2004,我需要使用python相同的結果。我怎樣才能達到這個目標如何將給定的序號(從Excel)轉換爲日期
回答
在1900/01/01 Excel中的偏移量;增加的天數爲timedelta:
from datetime import date, timedelta
def from_excel_ordinal(ordinal, _epoch=date(1900, 1, 1)):
if ordinal > 59:
ordinal -= 1 # Excel leap year bug, 1900 is not a leap year!
return _epoch + timedelta(days=ordinal - 1) # epoch is day 1
我不得不調整由的依次爲1900年2月28日之後的任何日期; Excel從Lotus 1-2-3繼承了leap year bug,並將1900作爲閏年。上述代碼爲59
和60
返回date(1900, 2, 28)
以解決此問題。
這是完美的,非常感謝你@Martijn Pieters – Krish 2015-04-01 09:47:09
@Krish:這個bug被Joel Spolsky推廣:[My First BillG Review](http://www.joelonsoftware.com/items/2006/06/16.html) – jfs 2015-04-02 20:07:45
你確定這個時代不是1899年12月31日? datetime(1899,12,31)+ timedelta(ordinal - (ordinal> 59))' – jfs 2015-04-02 20:20:35
from datetime import datetime, timedelta
def from_excel_ordinal(ordinal, epoch=datetime(1900, 1, 1)):
# Adapted from above, thanks to @Martijn Pieters
if ordinal > 59:
ordinal -= 1 # Excel leap year bug, 1900 is not a leap year!
inDays = int(ordinal)
frac = ordinal - inDays
inSecs = int(round(frac * 86400.0))
return epoch + timedelta(days=inDays - 1, seconds=inSecs) # epoch is day 1
excelDT = 42548.75001 # Float representation of 27/06/2016 6:00:01 PM in Excel format
pyDT = from_excel_ordinal(excelDT)
上面的答案對於日期值來說很好,但是在這裏我擴展了上面的解決方案以包含時間並返回datetime值。
- 1. 如何將FILETIME轉換爲Excel日期
- 2. 將序列號轉換爲日期
- 3. 將序號轉換爲日期
- 4. 如何將日曆日期轉換爲任何模塊的序號日期
- 5. 如何將給定爲「20110912T220000」(NSString)的日期轉換爲NSDate
- 6. 如何將給定日期轉換爲java,年,月,日
- 7. 將提取的日期從excel轉換爲SQL日期
- 8. 將美國日期(文本)轉換爲歐洲日期(日期)的Excel轉換
- 9. 將日期序列號轉換爲實際日期
- 10. 將excel DATEVALUE轉換爲javascript日期
- 11. 將DDMMYY號碼轉換爲日期嗎?
- 12. 如何將日期轉換爲星期編號
- 13. 如何將字符串轉換爲Excel中的日期?
- 14. 如何將字符串轉換爲Excel中的日期/時間?
- 15. 如何使用Lubridate將Excel日期格式轉換爲正確的日期
- 16. Sqlite:將日期轉換爲月中的日期編號
- 17. 將序號日期(YYYYDDD)轉換爲標準日期(例如UTC = YYYYMMDD)
- 18. 如何將日期日期轉換爲英文日期格式?
- 19. Excel VBA將字符串日期轉換爲實際日期
- 20. Excel 2010將文本(日期+時間)轉換爲日期
- 21. 將觀察日期拆分並將日期轉換爲序列號?
- 22. 如何將UTC日期轉換爲NSDate?
- 23. 如何將文本轉換爲日期?
- 24. 如何將日期轉換爲文本
- 25. 如何將日期轉換爲YYYYDDD?
- 26. zedgraph,如何將XAxis.Scale.Min轉換爲日期
- 27. 如何將Hibernate.TIMESTAMP轉換爲日期?
- 28. 如何將日期轉換爲單詞?
- 29. 如何將datetime轉換爲短日期?
- 30. 如何將日期轉換爲整數?
這是一個奇怪的序數;你確定04/06/2004是正確的嗎?如果價值38142代表* days *,那麼這將是1993/12/25或1993/10/27的偏移量,具體取決於您解釋的月份。 – 2015-04-01 09:29:18
[將日期轉換爲數字的公式](http://stackoverflow.com/q/19721416)表明它應該是自1900/01/01以來的幾天,這是'date.fromordinal()'的作用。但那個號碼就是一個數字。 – 2015-04-01 09:30:40
我的文件有值我不知道它的序號或不是我的客戶說它的序號,並告訴我,「如果你想找到實際的日期只是格式單元格在Excel中的給定值,那時我得到這個值「@MartijnPieters – Krish 2015-04-01 09:39:40