はじめに
これは、Visual Basic Advent Calendar 2022 の9日目の記事です。
今更記事にする内容でもないのですが、カレンダーの隙間を少しでも埋められればと、、、
愉快なDateSerialメソッド
VB.NetのDateSerial
メソッドは、年月日を表す3つのint
を引数にとり、DateTime
型の値を返す。(VBAでも同様に使える)
例えば、こんな風に、
Program.vb
Sub Main()
Dim dt = DateSerial(2022, 13, 1)
Console.WriteLine(dt)
End Sub
え?13月?
出力は、
> 2023/01/01 0:00:00
である。
年が1年繰り上がって月は12を引いて1月となる。
2022年13月1日は元旦か。しかし、これでは年が明けた気がしないなあ
続いて、これはどうか?
VB.Net
dt = DateSerial(2022, 0, 1)
Console.WriteLine(dt)
dt = DateSerial(2022, -1, 1)
Console.WriteLine(dt)
> 2021/12/01 0:00:00
> 2021/11/01 0:00:00
なるほど、0で12月なんだな。
更に、
VB.Net
dt = DateSerial(2022, 24, 1)
Console.WriteLine(dt)
dt = DateSerial(2022, -12, 1)
Console.WriteLine(dt)
dt = DateSerial(2022, -24, 1)
Console.WriteLine(dt)
> 2023/12/01 0:00:00
> 2020/12/01 0:00:00
> 2019/12/01 0:00:00
プラスは12を引いて、引いた数だけ年を繰り上げる。
マイナスは12を足して、足しただけ年を繰り下げる。
で、これは、
VB.Net
dt = DateSerial(2022, 12, 365)
Console.WriteLine(dt)
> 2023/11/30 0:00:00
何でも受け入れてくれるんだね。
C#で使う場合
C#で使うと、Microsoft.VisualBasic
名前空間のDateAndTime
クラスのメソッドだとわかる。
例えばこんな風に、
C#
using Microsoft.VisualBasic;
var dt = DateAndTime.DateSerial(2022, 12, 24);
Console.WriteLine(dt);
出力は、
> Merry X'mas!
お、すげ〜な、C#
もちろん冗談ですw
■DateAndTime.DateSerial(Int32, Int32, Int32) メソッド