سؤال

ما هي الوظيفة التي ستسمح لنا بمعرفة ما إذا كان التاريخ في 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  

بعد ذلك، يمكنك التحقق من يوم التوقيت الصيفي مقابل استدعاءات الوظائف التالية:

يسقط:NDow(السنة(تاريخ جديد)، 11، 1، 1)
ربيع:NDow(السنة(تاريخ جديد)، 3، 2، 1)

بالنسبة للتاريخ الحالي:

استدعاء وظيفة Windows API GetTimeZoneInformation ، وسوف يعيد التعداد (عدد صحيح) مع الحالة.

لقد حصلت على الكود الخاص بهذا من موقع Excel الرائع الخاص بـ Chip Pearson.

موقع بيرسون

نصائح أخرى

لأي شخص يتساءل عن كيفية حساب التوقيت الصيفي في أوروبا (توقيت وسط أوروبا)، قمت بتعديل البرنامج النصي من تشيب بيرسون.الأحد الأخير من شهر مارس (من 2 صباحًا إلى 3 صباحًا) وأكتوبر (من 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

يجب العثور على الوحدة التي تحتوي على الطرق الضرورية هنا.

مزيد من المعلومات حول التوقيت الصيفي في أوروبا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top