日付時刻
最終更新:
atachi
System.DateTime
時刻取得 | ||
DateTime.Now | 2001/12/12 12:31:25 | システムの現在日時を取得 |
DateTime.Today | 2001/12/12 00:00:00 | システムの現在日付を取得 |
DateTime.UtcNow | システムの現在日時をUTCで取得 | |
オペレーション | ||
DateTime(2001,12,12) | 2001/12/12 00:00:00 | 任意の日付で時刻を作成 |
DateTime(2001,12,12,12,31,25) | 2001/12/12 12:31:25 | 任意の日時で時刻を作成 |
DateTime型のプロパティには日時の各要素を取得できる。
dt.Date | 2001/12/12 00:00:00 | 同じ日付を示す新しいインスタンスの取得(時間はクリアされる) |
dt.Year | 2001 | 西暦の取得 |
dt.Month | 12 | 月の取得(1~12) |
dt.Day | 12 | 月の日付を取得 |
dt.DayOfWeek | Friday | 曜日を文字列で取得 |
dt.Hour | 12 | 時間の取得(0~23) |
dt.Minute | 31 | 分の取得(0~59) |
dt.Second | 25 | 秒の取得(0~59) |
dt.DayOfYear | 346 | 年間の経過日数 |
Javaと違い、月は「1」からのインデックスであることに注意。1月を示す場合は「1」、12月は「12」となる。(Javaでは1月は「0」、12月は「11」だった)
日時の演算
DateTimeには日時を演算するためのメンバメソッドが実装されている。(MSDN DateTime メンバ)
dt.AddDays(10);
dt.AddDays(-10);
これらは正負どちらの値も演算することができる。演算した結果、月や年をまたぐ場合には月や年の繰り上げや繰り下げが行われる。
DateTime dt = DateTime(2010,07,28,23,59,00); // 2010/7/28 23:59:00
dt = dt.AddDays(4);
Console.WriteLine( dt ); // 2010/8/1 23:59:00
日付の比較
2つの日付(DateTime)を比較するにはDateTime.Compareメソッドを使用する。
このメソッドは、2つの日付を比較した際に、同じか、最初の日付が過去であるか、最初の日付が未来であるか、によって異なった戻り値を返す。
DateTime t1 = new DateTime(1999,10,15); // 1999年10月15日
DateTime t2 = new DateTime(2010,10,15); // 2010年10月15日
if( DateTime.Compare(t1,t2) < 0){
// t1はt2より過去である
}
比較 | 意味 | 戻り値 |
t1 < t2 | t1がt2より過去の日時 | 0より小さい値( < 0 ) |
t1 == t2 | t1とt2が同じ日時 | 0 |
t1 > t2 | t1がt2より未来の日時 | 0より大きい値( > 0 ) |
月末日
ある年のある月の末日が何日になるかを知りたい場合は DateTime.DaysInMonth静的関数 を使用すればよい。
int dayCount = DateTime.DaysInMonth(2010,7); // 2010年7月の日数
Console.WriteLine("{0}日" , dayCount); // "31日"
文字列から日付の作成
DateTime.Parse静的関数を使用すれば文字列からDateTimeのインスタンスを取得できます。
書式は「yyyy/MM/dd hh:mm:ss」
DateTime dt1 = DateTime.Parse("2010/8/1");
DateTime dt2 = DateTime.Parse("2010/8/1 10:15:00");
日付のロケーション
DateTimeを文字列化する際にカルチャーの日付書式形式で文字列化したい場合には次のようにする。
Console.WriteLine("現在日時 {0:f}", DateTime.Now);
// または、ToStringを使用する
string str = DateTime.Now.ToString("D");
Console.WriteLine("現在日時 {0}", str);
これらの方法でDateTimeを文字列化する場合の書式は、アプリケーションのランタイム時のWindows環境設定が使用される。
Windowsの環境設定を変更すると、文字列フォーマットも変更される。
「コントロールパネル→地域と言語のオプション→地域オプション」
カルチャーによる文字列化
日時を文字列として出力する際に、その日時書式は文化によって異なります。
C#では文化毎の表現方法の違いをまとめたものを「カルチャー」と呼んでいます。
DateTime dt = DateTime.Now;
CultureInfo myCultureInfo = new CultureInfo("en-US");
// カルチャーを指定して現在時刻を表示
Console.WriteLine("西暦(英語)表示 : " + dt.ToString("D", myCultureInfo));
CultureInfo ci = new CultureInfo("de-DE");
// カルチャーを指定して現在時刻を表示
Console.WriteLine("西暦(ドイツ)表示 : " + dt.ToString("D", ci));
西暦(英語)表示 : Wednesday, July 28, 2010
西暦(ドイツ)表示 : Mittwoch, 28. Juli 2010
カルチャーの指定は表示形式を文化に併せるだけですので、時間自体はどちらも同じ時間を示しています。