1. 概要
参考サイトには、「特定の時点を表します。通常、日時形式で表されます。」と説明されています。
本ページは、下記のサイトを参考にさせていただきました。
「DateTime 構造体 (System)」
「DateTime.Subtract メソッド (System) 」
2. 初期化
現在日時で初期化するには、下記のように記述します。
DateTime myDateTime = DateTime.Now;
他に、わたしがよく使うのが、以下のものです。
DateTime(年, 月, 日);
DateTime(年, 月, 日, 時, 分, 秒);
DateTime(年, 月, 日, 時, 分, 秒, ㍉秒);
3. 文字列化
いつか詳細を書くかもしれませんが、とりあえず、日本人に一番なじみの深い書式でフォーマットするならば・・・。
DateTime.Now.ToString("yyyy年MM月dd月 HH:mm:ss")
ですかな。
4. 文字列を DateTime へ
前項の逆です。
DateTime = System.DateTime.ParseExact(文字列, 書式, null);
書式は、前項に出てくるようなものです。
文字列が不正なときは、「ArgumentNullException」(文字列または書式が null)、「FormatException」(文字列または書式がからの文字列か、日時として不正)の例外が発生します。
5. DateTime 加減算
「TimeSpan」は、時刻のデータを加減算するのに便利ですが、「DateTime」自体に、「Addxxx」というメソッド年・月・日・時・分・秒・㍉秒があり、それぞれ、下記のようになっています。
AddYears(Int32);
AddMonths(Int32);
AddDays(Double);
AddHours(Double);
AddMinutes(Double);
AddSeconds(Double);
AddMilliseconds(Double);
月や日の計算では、大小や閏月の計算や月替わりの処理を問題なくやってくれます。
日以下の単位の場合、「Double」なので、小数点以下の計算もやってくれるので便利です。
using System;
using System.IO;
using static System.DateTime;
public class myDateTime
{
static public void Main ()
{
DateTime t = new DateTime(2023, 1, 1);
for (int i=0; i<24; i++)
{
Console.WriteLine(t.ToString("yyyy年MM月dd日 HH:mm:ss"));
t = t.AddMonths(1);
}
Console.WriteLine("");
t = new DateTime(2024, 2, 28);
for (int i=0; i<3; i++)
{
Console.WriteLine(t.ToString("yyyy年MM月dd日 HH:mm:ss"));
t = t.AddDays(1);
}
Console.WriteLine("");
Console.WriteLine(t.ToString("yyyy年MM月dd日 HH:mm:ss"));
t = t.AddDays(0.5);
Console.WriteLine(t.ToString("yyyy年MM月dd日 HH:mm:ss"));
t = t.AddHours(0.5);
Console.WriteLine(t.ToString("yyyy年MM月dd日 HH:mm:ss"));
t = t.AddHours(1.5);
Console.WriteLine(t.ToString("yyyy年MM月dd日 HH:mm:ss"));
}
}
てなソースを書いて、実行すると下記の結果が得られます。
2023年01月01日 00:00:00
2023年02月01日 00:00:00
2023年03月01日 00:00:00
2023年04月01日 00:00:00
2023年05月01日 00:00:00
2023年06月01日 00:00:00
2023年07月01日 00:00:00
2023年08月01日 00:00:00
2023年09月01日 00:00:00
2023年10月01日 00:00:00
2023年11月01日 00:00:00
2023年12月01日 00:00:00
2024年01月01日 00:00:00
2024年02月01日 00:00:00
2024年03月01日 00:00:00
2024年04月01日 00:00:00
2024年05月01日 00:00:00
2024年06月01日 00:00:00
2024年07月01日 00:00:00
2024年08月01日 00:00:00
2024年09月01日 00:00:00
2024年10月01日 00:00:00
2024年11月01日 00:00:00
2024年12月01日 00:00:00
2024年02月28日 00:00:00
2024年02月29日 00:00:00
2024年03月01日 00:00:00
2024年03月02日 00:00:00
2024年03月02日 12:00:00
2024年03月02日 12:30:00
2024年03月02日 14:00:00
6. 比較
「DateTime」型は、単純に「<」「>」等を使用して、大小比較を行うことはできません(コンパイルエラーになります)。
DateTime.Compare(DateTime t1, DateTime t2);
という「static」メソッドを使用します。
using System;
using System.IO;
using static System.DateTime;
public class myDateTime
{
static public void Main ()
{
DateTime t1 = new DateTime(2023, 1, 1);
DateTime t2 = new DateTime(2023, 1, 2);
Console.WriteLine(DateTime.Compare(t1, t2));
Console.WriteLine(DateTime.Compare(t2, t1));
Console.WriteLine(DateTime.Compare(t1, t1));
}
}
というソースを書いて、実行すると下記の結果が得られます。
-1
1
0
この例だと、リターン値として「-1」「0」「1」が返っていますが、仕様ではリターン値は整数値で
・「0 より小さい値」 第一引数が第二引数よりも前
・「0」 第一引数と第二引数とが同じ日時
・「0 より大きい値」 第一引数が第二引数よりも後
となりますのでご注意。
7. 差
「DateTime.Subtract()」というメソッドを使って、時刻の差を求めます。
DateTime.Subtract(TimeSpan)
で、「DateTime」から指定した「TimsSpan」が経過した日時を「DateTime」形式で取得します。
DateTime.Subtract(DateTIme)
で、元の「DateTime」と引数の「DateTime」との日時差を「TimeSpan」形式で取得します。
using System;
using System.IO;
using static System.DateTime;
public class Program
{
static public void Main ()
{
DateTime t1 = DateTime.Now;
DateTime t2 = t1.AddMinutes(10);
Console.WriteLine(" ["+ t1.ToString("yyyy年MM月dd日 HH:mm:ss") +"]");
Console.WriteLine("5分前["+ t1.Subtract(new TimeSpan(0, 5, 0)).ToString("yyyy年MM月dd日 HH:mm:ss") +"]");
Console.WriteLine(" ["+ t2.ToString("yyyy年MM月dd日 HH:mm:ss") +"] との時刻差["+ t2.Subtract(t1).ToString() +"]");
}
}
てなソースを書いて実行すると、結果は、実行した日時によりますが、例えば、下記のような結果になります。
[2025年03月18日 08:33:57]
5分前[2025年03月18日 08:28:57]
[2025年03月18日 08:43:57] との時刻差[00:10:00]