在開發批導程式時會從Excel中獲取資料,但有些獲取Excel內容的方法獲取到的日期是其對應的數字
原來Excel在本質上是將日期和時間的存盤為一個數字的.
默認情況下,Excel把1900-1-1 0:00:00存盤為1,把1900-1-1 0:00:00以后的每一個時刻存盤為該時刻與1900-1-1 0:00:00這個時刻的差值(以天為單位),
比如在日期時間1900-1-2 13:00在Excel中對應的數字值是2.54166666666667,
將日期所在單元格的格式改為數值就可以查看日期對應的數值,
如何將Excel中的日期時間對應的數值轉換為ABAP的日期和時間呢?
由于Excel中將1900-1-1 0:00:00設定為1,而不是設定為0.這樣就需要ABAP這邊從1899-12-31加上excel中的日期對應的數字來獲取相應的SAP中日期,
但是仔細研究發現Excel中存在日期1900-02-29,而SAP中沒有這個日期,由于1900年不是閏年,所以不應該有2月29日,
據說這是一個bug,但微軟聲稱修改這個錯誤帶來的壞處要比好處多,所以一直沒有修復,
試用EXCEL期間發現,1900年2月29號被判斷為正確日期,導致日期轉化的時候差一天 - Microsoft Community
所以當Excel中的日期對應的數值大于59時,應該減去1.
轉換代碼如下:
DATA days TYPE i. IF cell_content > 59. days = cell_content - 1. ELSE. days = cell_content. ENDIF. CALL FUNCTION 'FIMA_DATE_CREATE' EXPORTING i_date = '18991231' * I_FLG_END_OF_MONTH = ' ' * I_YEARS = 0 * I_MONTHS = 0 * I_DAYS = 0 i_calendar_days = days * I_SET_LAST_DAY_OF_MONTH = ' ' IMPORTING e_date = <any> * E_FLG_END_OF_MONTH = * E_DAYS_OF_I_DATE = .
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/542959.html
標籤:SAP
上一篇:CSS 清除浮動
