PowerShellの開発でお困りのことはありませんか?
そんな悩みは
当サイトで解決!!
15.指定した年月のカレンダーを表示する CUI版 その1
UPDATE:2008/05/03
PowerShellでカレンダーを表示する関数を作成しました。
この関数を実行するには、指定した年月の第1日曜日を取得すると指定した年月の最終日を取得するが必要です。
Get-Calendar.ps1
#=============================================================================== # Get-Calendar: 指定した年月のカレンダーを表示する # # パラメータ: # $Year: 年(省略した場合は現在の年) # $Month: 月(省略した場合は現在の月) # # 使用例1(年月指定) # PS > Get-Calendar 2008 2 # # 使用例2(年月省略) # PS > Get-Calendar # # copyright HIRO's.NET(http://hiros-dot.net/) #=============================================================================== function global:Get-Calendar { Param ([int]$Year = $(Get-Date).Year, [int]$Month = $(Get-Date).Month) #表示用年月作成 $DispMonth = New-Object DateTime($Year, $Month, 1) $strDispMonth = ($DispMonth.ToString("MMMM",[System.Globalization.CultureInfo]'en-US') + " " + $Year) #横幅35文字の中間に表示されるようにする Write-Host "" Write-Host $strDispMonth.PadLeft([int](35 - (35 - $strDispMonth.Length) / 2)) $firstSunday = Get-FirstSunday $Year $Month $lastDay = Get-LastDay $Year $Month Write-Host "Sun. Mon. Tue. Wed. Thu. Fri. Sat." # 第1日曜日が"1日"以外の第1週を表示 if ( $firstSunday -ne 1 ) { for ( $i = 1; $i -lt $firstSunday; $i++ ) { $week += $i.ToString(" # "); } $spc = " " $spc *= [int](7 - ( $firstSunday - 1 )) Write-Host ($spc + $week) } #中間週を表示 $loopWeek = [Math]::floor(($LastDay - $firstSunday) / 7) $Day = $firstSunday for ( $weekCnt = 0; $weekCnt -lt $loopWeek; $weekCnt++ ) { $week = ""; for ( $iDay = 0; $iDay -lt 7; $iDay++ ) { if ( $Day -lt 10 ) { $week += $Day.ToString(" # "); } else { $week += $Day.ToString(" ## "); } $Day += 1 } Write-Host ($week) } #最終週を表示 if ( $Day -le $LastDay ) { $week = "" for ( $iDay = $Day; $iDay -le $LastDay; $iDay++ ) { $week += $Day.ToString(" ## "); $Day += 1 } Write-Host ($week) } }
|
実行例は下記の通りです。
使用方法ですが、 Get-Calendar[Enter]と入力すると、当月のカレンダーを表示します。
List1
PS > Get-Calendar
May 2008 Sun. Mon. Tue. Wed. Thu. Fri. Sat. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
指定した年月のカレンダーを表示するには、Get-Calendar 年 月[Enter] と入力します。
List2
PS > Get-Calendar 2008 6
June 2008 Sun. Mon. Tue. Wed. Thu. Fri. Sat. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
ポイント
1.タイトル(年月)の表示
「月」を英語で表示したかったので、ToString("MMMM")としましたが、”2月”と返ってくるので
ToString("MMMM",[System.Globalization.CultureInfo]'en-US') として英語で取得しています。
カレンダーを表示するのに必要な幅は35文字としています。
これは1日を5文字使用して表示しているので、× 7日 = 35文字となっています。
でタイトルは中心に表示したいので、計算して左側にスペースを入れています。(PadLeftメソッド)
2.カレンダーの表示
表示は第1週、中間週、最終週の3つに分けて行っています。
これは、第1週が必ずしも日曜日から始まるとは限らないこと、最終週が必ずしも土曜日で終わるとは限らないことを考慮したためです。