2008-09-25 51 views

回答

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(年(newdate),11,1,1)
春:NDow(年(newdate),3,2,1)

當前日期:

調用Windows API函數GetTimeZoneInformation, ,它會返回狀態的枚舉(整數)。

我從Chip Pearson偉大的Excel網站獲得了此代碼。

Pearson's site

+2

除了每個國家/地區不同之外。 – 2015-10-12 15:46:05

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 

包含必要方法的模塊將被發現here

More info on DST in Europe.