您如何确定 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?
如何确定给定日期是不是在 .NET 2.0 中给定时区的夏令时?
如何更改 p:calendar 组件中的夏令时 (DST) 日期