0

週末を除く、次の 2 つの連続する営業日 (米国の営業日) が休日であるかどうかを判断する必要があります。

これを解決するための私の努力:

todayVariable = Date.Now()

この変数の日付部分を取得して、1 または 7 の場合は週末であることを意味するので、そのままにしておきます。しかし、私が知らないのは、平日が休日ではないかどうかを判断する方法です。たとえば、今後 2 年間のすべての公休日のリストを取得するにはどうすればよいでしょうか。

4

3 に答える 3

3

明日が休日の場合は、次のように答えてください。

Dim todayVariable As Date = Today
Debug.Print(isHoliday(todayVariable.AddDays(1)))

Function isHoliday(ByVal dt As Date)
    Return getHolidayList(dt.Year).Any(Function(x) x = dt)
End Function

以下のコードは、米国連邦の祝日の日付を計算します。この方法の弱点は、ルールがハードコードされているため、まれに議会がルールを変更した場合にコードを変更する必要があることです。私の社内ソフトウェアでは問題ありませんが、他のソフトウェアでは問題になる可能性があります。

また、イースターは米国連邦の祝日ではないため、計算しません。Nature (1876) 復活祭の日付を計算するためのアルゴリズムを参照

Public Function getHolidayList(ByVal vYear As Integer) As List(Of Date)

    Dim FirstWeek As Integer = 1
    Dim SecondWeek As Integer = 2
    Dim ThirdWeek As Integer = 3
    Dim FourthWeek As Integer = 4
    Dim LastWeek As Integer = 5

    Dim HolidayList As New List(Of Date)

    '   http://www.usa.gov/citizens/holidays.shtml      
    '   http://archive.opm.gov/operating_status_schedules/fedhol/2013.asp

    ' New Year's Day            Jan 1
    HolidayList.Add(DateSerial(vYear, 1, 1))

    ' Martin Luther King, Jr. third Mon in Jan
    HolidayList.Add(GetNthDayOfNthWeek(DateSerial(vYear, 1, 1), DayOfWeek.Monday, ThirdWeek))

    ' Washington's Birthday third Mon in Feb
    HolidayList.Add(GetNthDayOfNthWeek(DateSerial(vYear, 2, 1), DayOfWeek.Monday, ThirdWeek))

    ' Memorial Day          last Mon in May
    HolidayList.Add(GetNthDayOfNthWeek(DateSerial(vYear, 5, 1), DayOfWeek.Monday, LastWeek))

    ' Independence Day      July 4
    HolidayList.Add(DateSerial(vYear, 7, 4))

    ' Labor Day             first Mon in Sept
    HolidayList.Add(GetNthDayOfNthWeek(DateSerial(vYear, 9, 1), DayOfWeek.Monday, FirstWeek))

    ' Columbus Day          second Mon in Oct
    HolidayList.Add(GetNthDayOfNthWeek(DateSerial(vYear, 10, 1), DayOfWeek.Monday, SecondWeek))

    ' Veterans Day          Nov 11
    HolidayList.Add(DateSerial(vYear, 11, 11))

    ' Thanksgiving Day      fourth Thur in Nov
    HolidayList.Add(GetNthDayOfNthWeek(DateSerial(vYear, 11, 1), DayOfWeek.Thursday, FourthWeek))

    ' Christmas Day         Dec 25
    HolidayList.Add(DateSerial(vYear, 12, 25))

    'saturday holidays are moved to Fri; Sun to Mon
    For i As Integer = 0 To HolidayList.Count - 1
        Dim dt As Date = HolidayList(i)
        If dt.DayOfWeek = DayOfWeek.Saturday Then
            HolidayList(i) = dt.AddDays(-1)
        End If
        If dt.DayOfWeek = DayOfWeek.Sunday Then
            HolidayList(i) = dt.AddDays(1)
        End If
    Next

    'return
    Return HolidayList

End Function

Private Function GetNthDayOfNthWeek(ByVal dt As Date, ByVal DayofWeek As Integer, ByVal WhichWeek As Integer) As Date
    'specify which day of which week of a month and this function will get the date
    'this function uses the month and year of the date provided

    'get first day of the given date
    Dim dtFirst As Date = DateSerial(dt.Year, dt.Month, 1)

    'get first DayOfWeek of the month
    Dim dtRet As Date = dtFirst.AddDays(6 - dtFirst.AddDays(-(DayofWeek + 1)).DayOfWeek)

    'get which week
    dtRet = dtRet.AddDays((WhichWeek - 1) * 7)

    'if day is past end of month then adjust backwards a week
    If dtRet >= dtFirst.AddMonths(1) Then
        dtRet = dtRet.AddDays(-7)
    End If

    'return
    Return dtRet

End Function
于 2014-11-14T04:58:07.340 に答える
0

米国の公式の休日の一般的に合意されたリストはありません。おそらく最も近いのは連邦祝日カレンダーですが、これには、ワシントンの誕生日やコロンブスデーなど、ほとんどの企業が営業している日が含まれます。

多くの企業は、休日をデータベーステーブルに入れるか、カレンダーテーブルにまとめることを選択します。

于 2012-10-12T20:49:32.900 に答える
0

他の人がすでに指摘しているように、「計算」または単に「どこかに行く」ことができる休日のリストはないようです。該当する日付のリストをハードコーディングする必要があります。

他の問題を回避するのに役立つ、説明に関するいくつかのコメント:

Date.Now は、日付と「今」の時刻を返します。時間を考慮せずに日付を比較したい場合は、Date.Today を使用できます。

dateValue.DatePart は、確かに日付部分 (年、月、日) を提供します。おそらく、曜日 (日曜日、月曜日、...) を知りたいと思うでしょう。これは次のようになります。

  Dim dayValue As System.DayOfWeek = dateValue.DayOfWeek

結果は、Sunday(=0)、Monday(=1) などの値を持つ整数 Enum です。

混乱を避けるために: dateValue (dateValue.Day) の Day プロパティは、1 か月の日数 (1..31) を示します。

于 2012-10-13T10:29:16.360 に答える