如何在VBA中获得自 epoch (1/1/1970) 以来的秒数?
问问题
27683 次
6 回答
19
怎么样:
datediff("s",#1970/1/1#,now())
于 2010-02-13T23:05:59.000 回答
17
这应该比 DateDiff 解决方案运行得更快:
Private Function Long2Date(lngDate As Long) As Date
Long2Date = lngDate / 86400# + #1/1/1970#
End Function
Private Function Date2Long(dtmDate As Date) As Long
Date2Long = (dtmDate - #1/1/1970#) * 86400
End Function
于 2010-02-18T14:35:49.177 回答
1
这是一个解决方案:http: //vbcity.com/forums/t/5084.aspx
Function UnixTime() As Variant
'The first parameter determines how the
' difference will be measured in i.e. "S" for seconds
UnixTime = DateDiff("S", "1/1/1970", Now())
End Function
于 2010-02-13T22:36:29.363 回答
0
我尝试为我的时区修改它并考虑 DST。时区在更改时可以有不同的设置。
Function Epoch2Date(lngDate As Long) As Date
'transfer to date
Epoch2Date = lngDate / 86400# + #1/1/1970#
'check if it is summer time
If IsDST(Epoch2Date) = False Then
'here you can use diferent values depend on time zone
Epoch2Date = Epoch2Date - 0.041666667
Else
Epoch2Date = Epoch2Date - 0.0833333333333333
End If
End Function
Public Function IsDST(ByVal d0 As Date) As Boolean
IsDST = d0 >= NextSun("24.3." & Year(d0) & " 01:59:59") And d0 < NextSun("24.10." & Year(d0) & " 01:59:59")
End Function
Private Function NextSun(d1 As Date) As Date
'if 24.3 or 24.10 is sunday returns 31.3 or 31.10
If Weekday(d1, vbMonday) = 7 Then
NextSun = d1 + 7
Else
'if not return nearest sunday
NextSun = d1 + 7 - Weekday(d1, vbMonday)
End If
End Function
于 2018-04-10T17:45:49.817 回答
0
DateDiff("s", "01/01/1970 00:00:00", Now())
&Format(Now(), "ms")
于 2018-09-19T12:57:32.357 回答
0
这是一个在 UTC 返回的解决方案,因为 DateDiff 会根据您的时区返回一个值:
Private Function UnixEpoch() As Long
Set ScriptEngine = CreateObject("MSScriptControl.ScriptControl")
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function unixTime() { var d = new Date(); var s = Math.round(d.getTime() / 1000); return s; } "
UnixEpoch = ScriptEngine.Run("unixTime")
End Function
在 JScript 上运行它会处理 VBA 中必需的时区变通方法。
于 2021-05-07T19:17:56.060 回答