分かりやすく、使いやすく。

年度を取得する方法

スポンサーリンク

PowerShell では年度を取得する標準メソッドは無い為、年度を計算して取得します。4月が年度の開始月の場合は、3ヶ月前の年を取得すれば年度になります。

  1. 4月が年度開始月の場合
  2. 年度の開始月が N 月の場合
  3. 年度を計算する汎用的な関数


4月が年度開始月の場合

年度を取得するサンプルコードは次の通りです。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
# 現在日時(DateTime)を取得する。
$now = Get-Date;
 
# 3ヶ月前を計算し、年(=年度)を文字列で取得する。
$nendo = $now.AddMonths(-3).ToString("yyyy");
 
Write-Host $now;
Write-Host $nendo; 

上記の実行例は次の通りです。

2018/03/09 5:29:52
2017 

以下は、上記の方法を12ヶ月分テストしたサンプルコードです。

PowerShell(実行可能なサンプルコード)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 1月から12月の日付を DateTime を取得
$m01 = [DateTime]::ParseExact("20170101","yyyyMMdd", $null); # 1月
$m02 = [DateTime]::ParseExact("20170215","yyyyMMdd", $null); # 2月
$m03 = [DateTime]::ParseExact("20170303","yyyyMMdd", $null); # 3月
$m04 = [DateTime]::ParseExact("20170430","yyyyMMdd", $null); # 4月
$m05 = [DateTime]::ParseExact("20170531","yyyyMMdd", $null); # 5月
$m06 = [DateTime]::ParseExact("20170622","yyyyMMdd", $null); # 6月
$m07 = [DateTime]::ParseExact("20170702","yyyyMMdd", $null); # 7月
$m08 = [DateTime]::ParseExact("20170815","yyyyMMdd", $null); # 8月
$m09 = [DateTime]::ParseExact("20170909","yyyyMMdd", $null); # 9月
$m10 = [DateTime]::ParseExact("20171018","yyyyMMdd", $null); # 10月
$m11 = [DateTime]::ParseExact("20171122","yyyyMMdd", $null); # 11月
$m12 = [DateTime]::ParseExact("20171231","yyyyMMdd", $null); # 12月
 
# 3ヶ月前を計算し、年を文字列で取得する。
$nendo01 = $m01.AddMonths(-3).ToString("yyyy");
$nendo02 = $m02.AddMonths(-3).ToString("yyyy");
$nendo03 = $m03.AddMonths(-3).ToString("yyyy");
$nendo04 = $m04.AddMonths(-3).ToString("yyyy");
$nendo05 = $m05.AddMonths(-3).ToString("yyyy");
$nendo06 = $m06.AddMonths(-3).ToString("yyyy");
$nendo07 = $m07.AddMonths(-3).ToString("yyyy");
$nendo08 = $m08.AddMonths(-3).ToString("yyyy");
$nendo09 = $m09.AddMonths(-3).ToString("yyyy");
$nendo10 = $m10.AddMonths(-3).ToString("yyyy");
$nendo11 = $m11.AddMonths(-3).ToString("yyyy");
$nendo12 = $m12.AddMonths(-3).ToString("yyyy");
 
Write-Host $m01;
Write-Host $nendo01;
Write-Host '------------------'
Write-Host $m02;
Write-Host $nendo02;
Write-Host '------------------'
Write-Host $m03;
Write-Host $nendo03;
Write-Host '------------------'
Write-Host $m04;
Write-Host $nendo04;
Write-Host '------------------'
Write-Host $m05;
Write-Host $nendo05;
Write-Host '------------------'
Write-Host $m06;
Write-Host $nendo06;
Write-Host '------------------'
Write-Host $m07;
Write-Host $nendo07;
Write-Host '------------------'
Write-Host $m08;
Write-Host $nendo08;
Write-Host '------------------'
Write-Host $m09;
Write-Host $nendo09;
Write-Host '------------------'
Write-Host $m10;
Write-Host $nendo10;
Write-Host '------------------'
Write-Host $m11;
Write-Host $nendo11;
Write-Host '------------------'
Write-Host $m12;
Write-Host $nendo12; 

実行結果は次の通りです。

2017/01/01 0:00:00
2016
------------------
2017/02/15 0:00:00
2016
------------------
2017/03/03 0:00:00
2016
------------------
2017/04/30 0:00:00
2017
------------------
2017/05/31 0:00:00
2017
------------------
2017/06/22 0:00:00
2017
------------------
2017/07/02 0:00:00
2017
------------------
2017/08/15 0:00:00
2017
------------------
2017/09/09 0:00:00
2017
------------------
2017/10/18 0:00:00
2017
------------------
2017/11/22 0:00:00
2017
------------------
2017/12/31 0:00:00
2017 

年度の開始月が N 月の場合

次のサンプルコードの $start に開始月を設定することで年度を取得できます。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 年度開始月を設定(この例では 6 月が年度開始月)
$start = 6;
 
# 何か月戻すべきかを計算
$backTo = ($start-1) * -1;
 
# 現在日時(DateTime)を取得する。
$now = Get-Date;
 
# Nヶ月前を計算し、年を文字列で取得する。
$nendo = $now.AddMonths($backTo ).ToString("yyyy");
 
Write-Host $now;
Write-Host $nendo;  

年度を計算する汎用的な関数

次のサンプルコードの Get-Nendo では第一引数に yyyymm 形式の数値または文字列を与えることで 4 月を開始月とした年度(文字列)を取得できます。開始月を変更したい場合は第二引数に開始月の数値を渡します。

PowerShell(実行可能なサンプルコード)
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
32
33
34
35
36
37
38
39
40
41
function Get-Nendo($yyyymm, $start = 4)
{
    # 何か月戻すべきかを計算する。
    $backTo = ($start-1) * -1;
 
    # 引数で渡された年月の DateTime を取得する。
    $dt = [DateTime]::ParseExact($yyyymm, "yyyyMM", $null);
 
    # 年度を計算して返す
    return $dt.AddMonths($backTo).ToString("yyyy");
}
 
# 以下は関数のテスト結果
 
# 4月を開始月とした場合
Write-Host (Get-Nendo 201701); # 2016
Write-Host (Get-Nendo 201702); # 2016
Write-Host (Get-Nendo 201703); # 2016
Write-Host (Get-Nendo 201704); # 2017
Write-Host (Get-Nendo 201705); # 2017
Write-Host (Get-Nendo 201706); # 2017
Write-Host (Get-Nendo 201707); # 2017
Write-Host (Get-Nendo 201708); # 2017
Write-Host (Get-Nendo 201709); # 2017
Write-Host (Get-Nendo 201710); # 2017
Write-Host (Get-Nendo 201711); # 2017
Write-Host (Get-Nendo 201712); # 2017
 
# 6月を開始月とした場合
Write-Host (Get-Nendo 201701 6); # 2016
Write-Host (Get-Nendo 201702 6); # 2016
Write-Host (Get-Nendo 201703 6); # 2016
Write-Host (Get-Nendo 201704 6); # 2016
Write-Host (Get-Nendo 201705 6); # 2016
Write-Host (Get-Nendo 201706 6); # 2017
Write-Host (Get-Nendo 201707 6); # 2017
Write-Host (Get-Nendo 201708 6); # 2017
Write-Host (Get-Nendo 201709 6); # 2017
Write-Host (Get-Nendo 201710 6); # 2017
Write-Host (Get-Nendo 201711 6); # 2017
Write-Host (Get-Nendo 201712 6); # 2017 
スポンサーリンク
スポンサーリンク