如何将Sharepoint日期从十六进制解析为java.util.Date

时间:2010-10-25 10:17:05

标签: java sharepoint date groovy

我正在尝试将MS Sharepoint中的Date解析为java.util.Date。 细节: 我通过SOAP GetListItems方法从Grails webapp查询Sharepoint。 在Sharepoint列表中,日期显示正确,这里是2009年9月9日,但在SOAP响应中,我得到了

0x01ca60cf|0x94894000
此外,这仅适用于docx,pptx等文件类型。

那么,有没有人知道如何将其转换为java.util.Date? 我已经尝试将两个十六进制值转换为Long或字节并将它们移动,但我搜索的所有算法仅适用于提供的样本十六进制值。

[编辑] 例如this SO解决方案(转换为Java)对我的值不起作用。

1 个答案:

答案 0 :(得分: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个蜱虫   毫秒。

这解释了: - )