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