본문 바로가기
programming language/powershell

Powershell 매월 X 째 주 Y요일 찾기

by __observer__ 2016. 1. 19.
반응형

일을 진행한다 보면 매월 X 째 주 Y요일에 어떤 일을 처리해야 하는 경우가 있습니다.

 

이런 스케줄을 처리 할 때 당연히 이에 대해 계산하는 함수 등이 필요 할 겁니다.

 

오늘은 Powershell 을 사용하여 위에 얘기한 매월 X 째 주 Y요일을 찾아볼까 합니다.

 

고맙게도 아래 주소에 Powershell을 사용하여 매월 X 째 주 Y요일을 찾는 Get-WeekDayInMonth 라는 함수가 작성되 있더군요.

 

http://blog.tyang.org/2012/09/03/powershell-function-get-weekdayinmonth/

 

 


Function Get-WeekDayInMonth ([int]$Month, [int]$year, [int]$WeekNumber, [int]$WeekDay)

{

   

    $FirstDayOfMonth = Get-Date -Year $year -Month $Month -Day 1 -Hour 0 -Minute 0 -Second 0

      

    #First week day of the month (i.e. first monday of the month)

    [int]$FirstDayofMonthDay = $FirstDayOfMonth.DayOfWeek

 

    $Difference = $WeekDay - $FirstDayofMonthDay

 

    If ($Difference -lt 0)

    {

        $DaysToAdd = 7 - ($FirstDayofMonthDay - $WeekDay)

    } elseif ($difference -eq 0 )

    {

        $DaysToAdd = 0

    }else {

        $DaysToAdd = $Difference

    }

 

    $FirstWeekDayofMonth = $FirstDayOfMonth.AddDays($DaysToAdd)

 

    Remove-Variable DaysToAdd

 

    #Add Weeks

    $DaysToAdd = ($WeekNumber -1)*7

 

    $TheDay = $FirstWeekDayofMonth.AddDays($DaysToAdd)

 

    If (!($TheDay.Month -eq $Month -and $TheDay.Year -eq $Year))

    {

        $TheDay = $null

    }

 

    $TheDay.ToString("yyyy년 MM월 dd일")

}

 

위 주소의 원본 함수에서 년도 표기만 수정 했습니다.

 

위 함수의 입력 인자 중 WeekDay 는 X 째 주를 의미 합니다. WeekNumber 는 Y 요일을 의미 하며 일요일이 0 입니다.

 

따라서 월요일은 1, 화요일은 2 … 가 될 것입니다.

 

위에 소개한 Get-WeekDayInMonth 함수를 활용하여 2016 년 1월부터 12월 까지의 2째주 수요일을 찾아보겠습니다.

 

2째주 이므로 WeekDay 에 2 를 수요일이므로 WeekNumber 에 3을 입력 합니다.

 

다음과 같이 간단하게 코딩하면~ 결과를 얻을 수 있습니다.

 

$month = 1..12

 

$buffer =@()

 

foreach ($mon in $month)

{

      

    $fist = Get-WeekDayInMonth $mon 2016 2 3

 

    $buffer += $fist

}

 

$buffer

 

실행해보니 다음과 같은 결과가 나오네요.


반응형

댓글