如何确定VBA中的夏令时?
-
02-07-2019 - |
题
什么功能会告诉我们VBA中的日期是否在夏令时?
解决方案
对于非当前日期(DST 2007 +):
首先,您需要一个函数来查找一个月中特定工作日的数量:
Public Function NDow(Y As Integer, M As Integer, _
N As Integer, DOW As Integer) As Date
' Returns Date of Nth Day of the Week in Month
NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
(DOW + 1) Mod 8)) + ((N - 1) * 7))
End Function
然后,您可以检查DST日与以下函数调用:
秋季:NDow(年(新日),11,1,1)
春天:NDow(年(新),3,2,1)
对于当前日期:
调用Windows API函数GetTimeZoneInformation, 它将返回状态为的枚举(整数)。
我从Chip Pearson的Excel网站上获得了这个代码。
其他提示
对于想知道如何计算欧洲夏令时(中欧时间)的人,我从 Chip Pearson 。 3月的最后一个星期日(凌晨2点到凌晨3点)和10月(凌晨3点到凌晨2点)是小时切换发生的日子。
以下代码是Excel中按钮的点击事件:
Dim dates As String
dates = "A1:A20"
For Each c In Worksheets("Sheet1").Range(dates).Cells
If (IsDateWithinDST(c.Value)) Then
c.Value = DateAdd("h", 1, c.Value)
End If
Next
包含必要方法的模块可在此处找到。
不隶属于 StackOverflow