将日期转换为UNIX时间戳Excel VBA

时间:2019-07-19 13:12:18

标签: excel vba unix

我找到了将该日期转换为UNIX时间戳的UDF

Sub Test()
Debug.Print ToUnix("03/01/2012")  '1325548800
End Sub

Public Function ToUnix(dt) As Long
ToUnix = DateDiff("s", "1/1/1970", dt)
End Function

结果在立即窗口中为1325548800

我有这个用于Yahoo Finance的URL LINK

如果看到过滤器选项,则会发现日期3/1/2012(2012年1月3日),而在url中会找到unix时间戳1325566800,与udf的结果几乎没有什么不同 如何在提供的URL中获得相同的unix时间戳?

1 个答案:

答案 0 :(得分:3)

这两个时间戳正好相隔5个小时。我希望Yahoo Finance与您正在使用的系统处于不同的时区。如果Yahoo Finance是您唯一关心的站点,则可以在该函数的输出中简单地增加18000秒,尽管当夏令时在11月结束时,这可能会改变。

VBA将计算您自己时区中日期之间的时差。这仅等于UTC时区中的Unix日期。您可以通过在立即窗口中执行测试来进行测试。

print datediff("s", "1/1/1970", date) mod 86400

86400是一天中的秒数,其余部分为0,这意味着计算是从1970年1月1日当地时间午夜到今天的午夜。如果您将剩余的雅虎时间,

print 1325566800 mod 86400

结果为18000,这是5小时内的秒数。因此Yahoo服务器位于UTC-5时区。借助位于纽约市的Yahoo Finance,冬季时它仅比UTC落后5小时。从3月到11月,它比UTC落后四个小时,因为纽约市遵守夏令时。

但是,出于一致性考虑,我怀疑它们的时间戳都是UTC-5,因为最近进行的任何测试都会显示UTC-4。我告诫您,以防万一,纽约市在11月从夏令时切换为标准时间时会发生什么情况。