我目前正在开发一个VB6项目,用于处理英国铁路股票传输的事件数据。有时候列车会对日期感到困惑,并且会在未来发送大量日期的事件,我看到的事件的日期可以追溯到2088年。日期是作为Unix时间传输的(从1970年1月1日起的秒数)。
我明白问题是什么,我只是在努力寻找解决方案。问题似乎是当日期超过'17 / 09/2059'时,它溢出了DateSerial可以处理的'day'所用的整数。下面的代码是发生溢出的行,所以当'intDays + 1'是> 32767
UnixTimestampToDateTime = DateSerial(1970, 1, intDays + 1) + TimeSerial(intHours, intMins, CInt(intSecs))
目标是将Unix时间转换为以下格式“dd / mm / yyyy hh:mm:ss”。我可以让DateSerial超出此日期限制,还是我需要完全改变计算日期的方式?任何帮助,将不胜感激。欢呼声。
答案 0 :(得分:2)
您可以将结果初始化为01/01/1970,然后添加所需的秒数:
Dim unix_time As Currency
Dim max_long As Long
Dim result As Variant
' Determine unix time
unix_time = .....
' Initialize result to 01/01/1970 00:00:00
result = DateSerial(1970, 1, 1) + TimeSerial(0, 0, 0)
' Determine maximum number of seconds we can add in a single call
max_long = 2147483647
' Add desired time
While unix_time > max_long
result = DateAdd("s", max_long, result)
unix_time = unix_time - max_long
Wend
result = DateAdd("s", CLng(unix_time), result)
答案 1 :(得分:0)
实际上,提出一个DateSerial
的替代版本可以接受Long
数日,这是非常简单的。试试这个:
Private Function MyDateSerial(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Long)
MyDateSerial = DateSerial(Year, Month, 1) + Day - 1
End Function
这是一个简单的用例来测试它
Debug.Print MyDateSerial(1970, 1, 30000), DateSerial(1970, 1, 30000)
19.2.2052 19.2.2052