您如何确定 VBA 中的夏令时?

Posted

技术标签:

【中文标题】您如何确定 VBA 中的夏令时?【英文标题】:How do you determine Daylight Savings Time in VBA? 【发布时间】:2010-09-12 22:51:21 【问题描述】:

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

【问题讨论】:

好问题!为什么要投反对票?! 【参考方案1】:

对于非当前日期(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 网站获得了此代码。

Pearson's site

【讨论】:

除非这因国家/地区而异。【参考方案2】:

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

包含必要方法的模块位于here。

More info on DST in Europe.

【讨论】:

以上是关于您如何确定 VBA 中的夏令时?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel / Moment - 如何确定夏令时期间是不是 created_at?

如何确定夏令时是不是在 C 中处于活动状态?

如何确定给定日期是不是在 .NET 2.0 中给定时区的夏令时?

如何更改 p:calendar 组件中的夏令时 (DST) 日期

如何在 Dynamics CRM 中获取时区的夏令时开始和结束?

Python 夏令时