2010-10-25 57 views
2

我想解析一個日期從MS Sharepoint到一個java.util.Date。 詳細信息: 我通過SOAP GetListItems方法從Grails Web應用程序查詢Sharepoint。 在Sharepoint列表中,日期顯示正確,在09/11/2009,但在SOAP響應中,我得到如何解析Sharepoint日期從十六進制到java.util.Date

0x01ca60cf|0x94894000
此外,這隻發生在docx,pptx等文件類型中。

那麼,有沒有人知道如何將其轉換爲java.util.Date? 我已經嘗試將兩個十六進制值轉換爲長整型或字節並將它們移位,但所有算法我googled只適用於提供的示例十六進制值。

[編輯]例如 this SO解決方案(轉換爲Java)不適用於我的值。

+0

在架構的響應是幾號的數據類型?你知道什麼格式日期存儲在Sharepoint嗎? – 2010-10-25 11:59:59

+0

在Sharepoint中,數據類型是'日期和時間',在另一個庫中只是'日期';我無法確切地說出響應中的數據類型,它是ows_MetaInfo屬性字符串的一部分。 – codeporn 2010-10-25 12:08:54

回答

4

有點教養的試錯之後,我結束了這一點:

def date = "0x01ca60cf|0x94894000" 

// Parse our hex numbers into a single number 
def nums = Long.parseLong(date.split(/\|/).collect { it.replace('0x', '') }.join(''), 16)/10000 
// MS calendar goes from 1600... Java's goes from 1970, so we need to make up the difference 
nums += Calendar.instance.updated(year:1601, month:0, date:1).time.time 

println "Converted date is ${new Date(nums as Long)}" 

你可能會想要做更多的測試,以確保它不只是僥倖我得到正確的日期在這種情況下...

你有更多的價值來測試它嗎?

編輯 ...

唉唉......唯一位我不知道就是爲什麼我需要做的/ 10000,但documentation for ticks in the DateTime object表明:

一個滴答中代表一百個 納秒或百萬分之一秒的 秒。在 毫秒內有10,000個滴答聲。

這就解釋了它:-)

+0

它的工作原理!我測試了幾個值。非常感謝你! – codeporn 2010-10-25 12:49:11

+0

酷:-)我無法解釋的唯一的一點是'/ 10000' ...但是如果它能夠工作,它就可以工作;-) – 2010-10-25 12:49:51

+0

解決了'/ 10000'問題,並將答案放在原因中 – 2010-10-25 12:55:21