スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
目次
はじめに
DateTime型とDateTime型を直接足し算することはできません。
詳しい理由はよくわかりませんが、単純に意味のある値にならないからでしょうか。
例えば、2000年6月と2030年3月を足し算することを考えます。
結果は、4030年の9月になりますが、このような計算を実際の業務ですることは皆無です。
とはいえ、DateTime型で表現されている値の10日後の日付を得たいという欲求はあるでしょう。
このような状況を解決する方法は主に2つあります。
1:時間間隔を意味するTimeSpan型を使用
2:DateTime型で用意されているメソッドを使用する
TimeSpan型の使用
TimeSpan型は時間間隔を扱います。
以下のような計算パターンが許されます。
TimeSpan=DateTime-DateTime
DateTime =DateTime±TimeSpan
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DateCalc02 { class Program { static void Main(string[] args) { //2020年3月20日8時30分20秒 DateTime dt1 = new DateTime(2000, 3, 20, 8, 30, 20); DateTime dt2 = new DateTime(2050, 9, 30, 10, 50, 40); //TimeSpan=DateTime-DateTime TimeSpan sp; sp = dt2 - dt1; Console.WriteLine(sp); //3日0時0分0秒 TimeSpan sp1 = new TimeSpan(3, 0, 0, 0); //DateTime =DateTime±TimeSpan DateTime dt3 = dt1 + sp1; DateTime dt4 = dt2 - sp1; Console.WriteLine(dt3); Console.WriteLine(dt4); //DateTime型のメソッドを使用してTimeSpan型を使って加減算することもできる DateTime dt5 = dt1.Add(sp1); DateTime dt6 = dt2.Subtract(sp1); Console.WriteLine(dt5); Console.WriteLine(dt6); //エラー(DateTime+DateTimeはできない) //sp = dt2 + dt1; } } } |
実行結果
18456.02:20:20
2000/03/23 8:30:20
2050/09/27 10:50:40
2000/03/23 8:30:20
2050/09/27 10:50:40
DateTime型のメソッド
DateTime型では、以下のようなメソッドが用意されています。
メソッド | 意味 | 引数の型 |
AddYears | 年を足す | int |
AddMonths | 月を足す | int |
AddDays | 日を足す | double |
AddHours | 時を足す | double |
AddMinutes | 分を足す | double |
AddSeconds | 秒を足す | double |
AddMilliseconds | ミリ秒を足す | double |
Add | 時間間隔を足す | TimeSpan |
年と月に関するメソッドの引数は整数のみしか受け付けません。
また、引き算をしたい場合は、マイナスの値を入れればいいです。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DateCalc03 { class Program { static void Main(string[] args) { //2020年3月20日8時30分20秒 DateTime dt1 = new DateTime(2000, 3, 20, 8, 30, 20); Console.WriteLine(dt1); dt1.AddDays(5);//これだけだと反映されない Console.WriteLine(dt1); dt1 = dt1.AddDays(5);//代入する必要がある Console.WriteLine(dt1); dt1 = dt1.AddDays(-3); Console.WriteLine(dt1); } } } |
実行結果
2000/03/20 8:30:20
2000/03/20 8:30:20
2000/03/25 8:30:20
2000/03/22 8:30:20
注意すべき点として、
dt1.AddDays(5);
と書いただけではdt1の値が変更されません。
dt1 = dt1.AddDays(5);
と変更した値を代入する必要があります。
関連記事
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。