非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

C#: 日付の操作

   

VBAに続き、C#の日付操作についても書き留めておきます。ちなみに、公式ドキュメントはこちら

 

まずは基本形

C#ではDateTimeという構造体が用意されています。これを使うと日付操作が可能になります。基本形は下記の通り。

DateTime dt = DateTime.Now;
//DateTime dt = DateTime.Today; //時刻なしはこちら
int y = dt.Year; //年
int m = dt.Month; //月
int d = dt.Day; //日
int h = dt.Hour; //時
int mm = dt.Minute; //分
int s = dt.Second; //秒

string dtstr1 = y +"/"+ m +"/"+ d +" "+ h +":"+ mm +":"+ s;
string dtstr2 = dt.ToString("yyyy/M/d H:m:s");
string dtstr3 = dt.ToString("yyyy/MM/dd HH:mm:ss");
MessageBox.Show(dtstr1 +"\n"+ dtstr2 +"\n"+ dtstr3);
 

 

実行すると以下のようなメッセージボックスが現れます。

[ad#top-1]

日付の足算

日付の加算にはAssDaysメソッドを使います。使用例は以下の通り。40日前を計算しています。ちなみに月数加算はAddYears(Int32)、年加算はAddMonths(Int32)メソッドを使用します。

DateTime dt = DateTime.Now;
DateTime dt2 = dt.AddDays(-40);
MessageBox.Show(dt.ToString("yyyy/M/dd H:m:s") +"\n"+ dt2.ToString("yyyy/M/dd H:m:s"));
 

 

実行するとご覧の通り40日前の日付が表示されました。

 

月末の日付を得る

月末を求めるにも加算時と同じくAssDaysメソッドを使います。ちょっとテクニックを使います。これは覚えておくと便利です。

DateTime dt = DateTime.Now;
//今月初
DateTime dt3 = dt.AddDays((dt.Day - 1) * -1);
//今月末
DateTime dt4 = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
//先月末
DateTime dt5 = dt.AddDays((dt.Day - 1) * -1 - 1);

MessageBox.Show(dt3.ToString("yyyy/M/d") +"\n"+ dt4.ToString("yyyy/M/d") +"\n"+ dt5.ToString("yyyy/M/d"));
 

 

実行するとはいこのの通り。

 

文字列から日付型に変換する

日付の文字列から日付型に変換する方法です。VBAの時と同様、「20170728」や「170728」という文字列は変換できません。これなんでだろ??

DateTime dt = DateTime.Now;
DateTime dt6 = DateTime.Parse("2017/7/28");
DateTime dt7 = DateTime.Parse("2017年7月28日");
DateTime dt8 = DateTime.Parse("20170728"); //エラー!
 
MessageBox.Show(dt6.ToString("yyyy/M/d") +"\n"+ dt7.ToString("yyyy/M/d"));
 

 

4行目をコメントアウトした上で実行するとこの通りです。

 

Excelのシリアル値を扱う

C#1が便利なのはExcelの日付シリアル値を扱える点です。以下はExcelシリアル値に変換する例ですが、シリアル値から日付に変換するのは FromOADate(Double)メソッドとなります。

DateTime dt = DateTime.Now;
double oa = dt.ToOADate();
MessageBox.Show("OLEシリアル値: " + oa);
 

 

得たシリアル値をExcelに入力して日付の書式にすると、以下の通りちゃんと日付データになることを確認しました。

 

[ad#ad-1]

 

スポンサーリンク

 - C#応用編