libro
www.tuyano.com
初心者のためのC#プログラミング入門

文字列と日時 (4/4)

作成:2013-11-23 10:43
更新:2013-11-23 10:43

■日時の計算とTimeSpan

日時の値は、単に指定の日時を表示したりというだけでなく、「計算」に用いられることが多いでしょう。例えば、ある日時から一定時間が経過した日時を調べたり、2つの日時の間隔を得たりすることですね。これらの基本的な計算の仕方をまとめておきましょう。

なお、時間の長さを表すものとして「TimeSpan」という構造体が用いられていますが、これについては後述します。

●時間の加算
DateTime 変数 = 《DateTime》 + 《TimeSpan》;
ある日時に、決まった長さの時間を足したり引いたりする場合は、記号を使った足し算で簡単に行うことができます。DateTimeに、時間の長さを表す値を足し算することで、それだけの時間が経過した日時をDateTimeとして取得できます。

●時間の減算
DateTime 変数 = 《DateTime》 - 《TimeSpan》;
TimeSpan 変数 = 《DateTime》+《DateTime》;
日時の引き算も、やはり通常の引き算記号である記号で計算することができます。2つの日時の差を求める場合は、DateTime - DateTimeと記述し、結果をTimeSpanで受け取ります。またある日時から決まった長さの時間を引き算したい場合は、DateTime - TimeSpanと実行し、計算結果をDateTimeで受け取ります。


■TimeSpanについて

日時の計算を行うとき、必須となるのが「TimeSpan」構造体です。これは「時間の長さ」を表すのに用いられるものです。このインスタンスは以下のようにして作成できます。
変数 = new TimeSpan( Tick値 );
変数 = new TimeSpan( 時 , 分 , 秒 );
変数 = new TimeSpan( 日 , 時 , 分 , 秒 );

こうして作ったTimeSpanを使ってDateTime計算をしたり、あるいは計算結果をTimeSpanで受け取ったりするわけですね。取得したTimeSpanは、以下のようにして特定の単位で換算した値を得ることができます。
int 変数 = 《TimeSpan》.Days――日数
int 変数 = 《TimeSpan》.Hours――時数
int 変数 = 《TimeSpan》.Minutes――分数
int 変数 = 《TimeSpan》.Seconds――秒数
double 変数 = 《TimeSpan》.TotalDays――すべてを日数換算した値
double 変数 =《TimeSpan》.TotalHours――すべてを時数換算した値
double 変数 =《TimeSpan》.TotalMinutes――すべてを分数換算した値
double 変数 =《TimeSpan》.TotalSeconds――すべてを秒数換算した値
long 変数 = 《TimeSpan》.Ticks――Tick換算した値

2種類ありますが、Totalがついてないものはその時間を「○○日○○時間○○分○○秒」というようにそれぞれの単位を用いて表した時の各単位の値になります。Totalがついているものは、その時間を指定の単位だけで換算した値になります。例えばTotalHoursは、その時間を「全部で何時間か」で計算したものになります。

下に利用例を挙げておきます。1543年12月6日 01:23:45 AMから現在までの経過時間を計算し、今からその時間後はいつになるかを計算しています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

using System;

namespace MyCLIApp
{
    class Program
    {
        public static void Main(string[] args)
        {
            DateTime d1 = DateTime.Parse("1543年12月6日 01:23:45 AM");
            DateTime d2 = DateTime.Now;
            TimeSpan s = d2 - d1;
            DateTime d = d2 + s;
            Console.WriteLine("今日から" + d1 + "までは、" + s.Days + "日。");
            Console.WriteLine("今日から" + s.Days + "日後は、" + 
                              d.ToString("yyyy年MM月dd日。"));
            Console.ReadKey(true);
        }
    }
}


※関連コンテンツ

「初心者のためのC#プログラミング入門」に戻る