【问题标题】:Convert VB6 Dbl Date value to Java Long Value将 VB6 Dbl 日期值转换为 Java 长值
【发布时间】:2015-11-03 22:44:51
【问题描述】:

我有一个旧的旧版 VB6 应用程序,它通过 CDbl(Now) 类型语句向我发送一个日期值作为双精度值。在 java 端,当前代码读入的值为new Date(Long.parse(value))

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

我认为 java 日期从 0 开始在某个任意日期从那里开始计数(我认为 1/1/1970),VB 6 日期可能是同一类型的想法,但我发现它很难追踪有关 VB6 数据类型的信息。大概如果我知道日期之间的差异是什么,并且测量单位相同,我可以抵消我发送给 java 应用程序的值。

【问题讨论】:

标签: java date vb6 type-conversion


【解决方案1】:

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

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

【讨论】:

  • 这是我要去的地方,我会做一些测试,然后在这里回复你
  • 谢谢 xxbbcc,我今天回来了,您的文档确实让我找到了解决方案。我最终只计算了从 java 纪元日期到相关日期的毫秒数,然后做了一些工作来考虑夏令时。现在我在 java 端有了正确的日期。我会接受,但这不是解决方案。尽管如此,它帮助我实现了目标。
  • @MarkW 很高兴你找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 2014-03-28
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
相关资源
最近更新 更多