5

什么函数可以让我们知道 VBA 中的日期是否在 DST 中?

4

2 回答 2

5

对于非当前日期(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(Year(newdate), 11, 1, 1)
春季:NDow(Year(newdate), 3, 2, 1)

对于当前日期:

调用 Windows API 函数 GetTimeZoneInformation,它将返回一个带有状态的枚举(整数)。

我从 Chip Pearson 的 Excel 网站获得了代码。

皮尔逊的网站

于 2008-09-25T00:57:37.880 回答
4

对于想知道如何计算欧洲夏令时(欧洲中部时间)的任何人,我修改了来自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

包含必要方法的模块可以在这里找到。

有关欧洲 DST 的更多信息。

于 2015-12-18T13:58:38.773 回答