将VB6 Dbl日期值转换为Java长值

将VB6 Dbl日期值转换为Java长值,java,date,vb6,type-conversion,Java,Date,Vb6,Type Conversion,我有一个旧的遗留VB6应用程序,它通过CDbl(Now)type语句将日期值作为双精度值发送给我。在java端,当前代码读取值为newdate(Long.parse(value)) 我不能修改java端,但可以更改VB6代码。如何获取Long.parse的正确浮点值来解析带有日期和时间的正确值 我认为java日期从0开始,从那里开始计算(我认为是1970年1月1日),VB6日期可能是相同类型的想法,但我发现很难找到有关VB6数据类型的信息。假设我知道日期之间的差异,并且度量单位相同,我就可以抵消

我有一个旧的遗留VB6应用程序,它通过
CDbl(Now)
type语句将日期值作为双精度值发送给我。在java端,当前代码读取值为
newdate(Long.parse(value))

我不能修改java端,但可以更改VB6代码。如何获取
Long.parse的正确浮点值来解析带有日期和时间的正确值


我认为java日期从0开始,从那里开始计算(我认为是1970年1月1日),VB6日期可能是相同类型的想法,但我发现很难找到有关VB6数据类型的信息。假设我知道日期之间的差异,并且度量单位相同,我就可以抵消发送给java应用程序的值

您可以尝试调用VB6端,并按照Java的日期/时间编码规则,将生成的
SYSTEMTIME
结构打包成
Double
。(我不知道这些规则,所以我假设它们与OLE日期/时间编码规则不同。如果它们相同,您可以直接传递
双精度
。)


如果需要在VB6中直接访问日期值的字节,可以调用-这将为您提供变量的地址,您可以根据需要读取字节。它可能比调用
CDbl()
更安全。(我目前没有安装VB6,但转换函数可能会对输入值执行有趣的操作。调用
VariantTimeToSystemTime
可以避免使用
CDbl()

如果我没有记错,VB6使用OLE日期/时间(
VT\u date
)。这篇文章可能会让你开始:这里还有一篇:@xxbbcc Nice!,这里面可能有我需要的东西。。。有很多书要读。。。至少它是一个startUse CLng而不是CDbl。。。不要使用
CLng
-
Long
在VB6中是32位整数。如果您需要访问值的实际字节,可以使用
VarPtr()
。这就是我的目的地,我将进行一些测试,然后在这里与您联系。谢谢xxbbcc,我今天回到这里,您的文档确实为我找到了一个解决方案。最后,我只计算了从java纪元日期到相关日期的毫秒数,然后做了一些工作来计算夏令时。现在我在java方面有了正确的日期。我会接受的,但这不是一个很好的解决方案。尽管如此,它还是帮了我一把。@MarkW我很高兴你找到了解决办法。