我正在使用 Excel 从日志文件中显示时间戳。文件原始输出中的时间戳以毫秒精度显示,这是我需要维护的。时间戳也是 UTC,我需要将其转换为我的本地时区。当我使用 dateAdd 函数转换为我的 TZ 偏移量时,它将毫秒值设置为“000”。
GetLocalTimeFromGMT = DateAdd("h", offset, dateToConvert)
有没有一种方法可以使用 dateAdd 而不会失去该精度,或者是否有其他更适合该任务的函数?
我正在使用 Excel 从日志文件中显示时间戳。文件原始输出中的时间戳以毫秒精度显示,这是我需要维护的。时间戳也是 UTC,我需要将其转换为我的本地时区。当我使用 dateAdd 函数转换为我的 TZ 偏移量时,它将毫秒值设置为“000”。
GetLocalTimeFromGMT = DateAdd("h", offset, dateToConvert)
有没有一种方法可以使用 dateAdd 而不会失去该精度,或者是否有其他更适合该任务的函数?
我的第一个想法是使用 Format(YourDate, "mm/dd/yyyy hh:mm:ss.000"),但它不起作用。我认为 DateAdd 绝对是这里的罪魁祸首,直到我试图只增加 5 个小时到一个日期。在工作表中完成后,保留了毫秒。在 VBA 中完成时,不会保留毫秒。这可能与 Excel 如何处理时间和日期有关。DateAdd,在一定程度上是 VBA,只是没有设置来执行此操作。
最快和最简单的方法有点脏,但它有效。把你所有的时间都放在一张纸上,然后用
="CellLocationOfGMTDate" + (offset/24)
这将为您提供所需的时间并保留毫秒。然后,您可以从工作表中提取时间和日期。
如果您确实需要在 VBA 中执行此操作,则必须弄清楚如何从日期中提取毫秒,然后在添加偏移量后将它们添加回来。如果我发现了什么,我会尝试弄清楚并在稍后报告。
请查看以下链接了解更多详情。
http://www.cpearson.com/excel/TimeZoneAndDaylightTime.aspx
Function GetLocalTimeFromGMT(Optional GMTTime As Date) As Date
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetLocalTimeFromGMT
' This returns the Local Time from a GMT time. If GMTTime is present and
' greater than 0, it is assumed to be the GMT from which we will calculate
' Local Time. If GMTTime is 0 or omitted, it is assumed to be the GMT
' time.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim GMT As Date
Dim TZI As TIME_ZONE_INFORMATION
Dim DST As TIME_ZONE
Dim LocalTime As Date
If StartTime <= 0 Then
GMT = Now
Else
GMT = GMTTime
End If
DST = GetTimeZoneInformation(TZI)
LocalTime = GMT - TimeSerial(0, TZI.Bias, 0) + IIf(DST = TIME_ZONE_DAYLIGHT, TimeSerial(1, 0, 0), 0)
GetLocalTimeFromGMT = LocalTime
End Function