我需要一個好的OLEDate Java實現,this one似乎並沒有工作。是否有任何已知的良好的開源實現(如在Apache共享)?如果沒有,我在哪裏讀到它,這樣我就可以編寫我自己的實現了?OLEDate java實現
3
A
回答
2
這Old New Thing blog entry似乎是關於這一主題的體面論文:
OLE自動化日期格式是浮點值,因爲午夜12月30日1899小時和分鐘被表示爲小數天計數天。
如果您有權訪問Visual Studio和MFC COleDateTime源,則可以在Java中重新實現。
3
試試這個代碼:
public static Date getDateFromCOMDate(float comtime) {
String floatstr = String.valueOf(comtime);
String [] ss = floatstr.split("\\.");
long nulltime = -2209183200000L;
long dayms = 86400000;
int days = Integer.valueOf(ss[0]);
float prop = comtime - days;
long cdayms = Math.round(dayms * prop);
long time = nulltime + days*dayms + cdayms;
Date d = new Date(time);
return d;
}
2
以前的實現是越野車,例如錯誤的日期爲1.0和-1.25。下面的實現符合MSDN中描述的OLE日期,例如這裏:https://msdn.microsoft.com/en-us/library/system.datetime.tooadate(v=vs.110).aspx
下面的實現符合MSDN文檔。 它將BigDecimal值轉換爲Joda LocalDateTime。 BigDecimal比float和double更好,因爲它能夠保持精確的值。
class COMDateToRegularDateConverter {
private static final LocalDateTime ZERO_COM_TIME = new LocalDateTime(1899, 12, 30, 0, 0);
private static final BigDecimal MILLIS_PER_DAY = new BigDecimal(86400000);
LocalDateTime toLocalDateTime(BigDecimal comTime) {
BigDecimal daysAfterZero = comTime.setScale(0, RoundingMode.DOWN);
BigDecimal fraction = comTime.subtract(daysAfterZero).abs(); //fraction always represents the time of that day
BigDecimal fractionMillisAfterZero = fraction.multiply(MILLIS_PER_DAY).setScale(0, RoundingMode.HALF_DOWN);
return ZERO_COM_TIME.plusDays(daysAfterZero.intValue()).plusMillis(fractionMillisAfterZero.intValue());
}
}
相關問題
- 1. Java實現
- 2. CircularArrayQueue實現Java
- 3. Java實現
- 4. 實現SerialPortEventListener - java
- 5. JSONRPC Java實現
- 6. Java Ring實現
- 7. 用Java實現
- 8. Java中的Java實現
- 9. 段樹java實現
- 10. Java的MPI實現
- 11. SCIM的Java實現
- 12. JAVA JNA WindowProc實現
- 13. Java GPU的實現
- 14. Java Array HashCode實現
- 15. 實現在Java中
- 16. Quick Union Java實現
- 17. Quicksort java arraylist實現
- 18. 鏈表實現java
- 19. Java:實現列表
- 20. Java接口實現
- 21. JAVA-SAML 2.0實現
- 22. REST RQL Java實現
- 23. Java地圖實現
- 24. java.lang.Math類的純Java實現
- 25. 如何在Java中實現
- 26. java的列表實現
- 27. 在Java中實現BFS
- 28. 的Java實現的LinkedBlockingQueue
- 29. Java實現算法調度
- 30. Java實現ActionListener問題
爲什麼koders.com代碼不起作用?最近我可以告訴,它取決於浮點實現,它根本不是便攜式的。 – 2010-04-12 16:43:54