月末の日付を取得する(日付の処理1)

2022年2月16日水曜日

VB.NET 日付操作

t f B! P L
 今回は日付の計算についてのテクニックを御紹介したいと思います。

企業向けのシステムの場合、販売・購入した代金を
翌月の月末に支払うなどの商習慣が存在します。
そのため販売した代金がいつ、いくら入金されるかを確認するため
販売日の翌月の月末の日付をプログラムで求める必要があります。

今回はこの月末の日付を計算する例を紹介したいと思います。

10日や20日ですと単純に日付を指定できますが、
月末の場合は31日までの月、30日までの月が混在し、
2月に到っては28日まで、うるう年の場合は29日までとなり、
単純に日付を指定するのは非常に困難です。

この月末の日付を取得する方法はいくつかありますが、
ここでは「ある月の1日の前日が前月の月末」という考え方で
「AddMonths」メソッド、「AddDays」メソッドを使用して
取得する方法を御紹介します。

まず「AddMonths」メソッド、「AddDays」メソッドですが、
DateTimeオブジェクトのメソッドで、
引数で指定した値を加算・減算するメソッドです。
.AddDays(20)     '←20日後
.AddMonths(-2)     '←2ヶ月前

このメソッドを利用したサンプルを見てみましょう。

2022年1月20日の翌月の末日を取得する

Dim dteTemp As Date    '変数を確保します。

'1.元になる日付を格納します。(dteTemp = 2022/1/20)

dteTemp = "2022/1/20"

'2.元になる日付の月の1日に変換します。(dteTemp = 2022/1/1)
'(Format関数で年・月を取り出し、日の部分は1日に指定します。)
dteTemp = CDate(Format(dteTemp , "yyyy/MM/") & "01")

'3.翌月の末日を求めるので2ヶ月後の1日変換します。(dteTemp = 2022/3/1)
dteTemp = dteTemp .AddMonths(2)

'4.取得した2ヶ月後の1日を前日に変換します。(dteTemp = 2022/2/28)
dteTemp = dteTemp .AddDays(-1)

この方法でいくつかのStepを踏みますが、
末日の日付の計算が可能です。

例では1ヶ月の末日の例ですが、3ヶ月後の末日の場合は、
dteTemp.AddMonths(2)をdteTemp.AddMonths(4)に変更すると
4ヶ月後の1日の前日 = 3ヶ月後の1日の月末として
取得することが可能です。

このような形で「AddMonths」メソッド、「AddDays」メソッドを使用して
月末の日付を取得することが可能です。

他にもいろいろと方法もございますし、
開発するシステムによっては、よりふさわしい方法もあるかと思いますが、
御参考にしていただければと思います。
サンプルはVB.NETで作成しておりますが、
考え方はどんな言語でも同じですので、
参考にしていただければと思います。


QooQ