我有一个旧的遗留VB6应用程序,它通过CDbl(Now)
类型语句向我发送日期值为double。在java端,当前代码将值读入new Date(Long.parse(value))
。
我无法修改java端,但可以更改VB6代码。我如何获得Long.parse
的正确浮点值来解析正确的值与日期和时间。
我认为java日期从某个任意日期开始从0开始(我认为是1/1/1970),VB 6日期可能是同一类型的想法,但我发现它很难跟踪有关VB6数据类型的信息。据推测,如果我知道日期之间的区别是什么,并且测量单位是相同的,我可以只偏移我发送给java应用程序的值。
答案 0 :(得分:2)
您可以尝试的一件事是在VB6端调用VariantTimeToSystemTime
,并根据Java的日期/时间编码规则将生成的SYSTEMTIME
结构打包到Double
中。 (我不知道这些规则,所以我认为它们与OLE日期/时间编码规则不同。如果它们相同,你可以直接传递Double
。)
如果需要直接访问VB6中日期值的字节,可以调用VarPtr()
- 这将为您提供变量的地址,您可以根据需要读取字节。它可能比调用CDbl()
更安全。 (我目前没有安装VB6,但转换功能可能会对输入值执行有趣的操作。调用VariantTimeToSystemTime
可以避免需要CDbl()
。)