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]
スポンサーリンク




