#18 C#で学ぶ日付と時刻の扱いの基本
C#の日付操作は、`DateTime`という型を使い、分かりやすいメソッド名で操作できるのが特徴です。この記事では、C#における日付の基本的な扱い方と、実務でハマりやすいポイントを解説します。
DateTimeを使う
DateTime now = DateTime.Now;
Console.WriteLine(now);
`DateTime.Now`は実行環境のローカル時刻を返します。サーバーとクライアントで環境が違うアプリでは、後述する`DateTimeOffset`や`DateTime.UtcNow`との使い分けが重要になります。
日付を文字列にする
Console.WriteLine(now.ToString("yyyy年MM月dd日"));
Console.WriteLine(now.ToString("HH:mm:ss"));
`ToString`の引数に渡す書式指定子を変えることで、表示形式を自由にカスタマイズできます。`yyyy`は西暦4桁、`MM`は月(2桁)、`dd`は日(2桁)を表します。よく使う組み合わせは覚えておくと便利です。
文字列から日付に変換する
逆に、文字列を`DateTime`に変換したい場合は`DateTime.Parse`や`DateTime.TryParse`を使います。
string input = "2026-08-18";
if (DateTime.TryParse(input, out DateTime result))
{
Console.WriteLine(result);
}
`Parse`は変換に失敗すると例外を投げますが、`TryParse`は失敗時に`false`を返すだけなので、ユーザー入力のように形式が保証されていない値を扱う場合は`TryParse`を使うのが安全です。
日付を計算する
DateTime threeDaysLater = now.AddDays(3);
DateTime lastMonth = now.AddMonths(-1);
TimeSpan diff = threeDaysLater - now;
`AddDays`や`AddMonths`は負の値を渡すことで過去方向への計算もできます。2つの`DateTime`を引き算すると`TimeSpan`型が得られ、経過日数や経過時間を取得できます。
C#ならではの注意点
C#には`DateTime`のほかに、より高度な`DateTimeOffset`という、タイムゾーンの情報まで含めて扱える型もあります。複数の地域をまたぐアプリケーションを作る場合、`DateTime.Now`だけに頼るとサーバーの設置場所によって結果がずれてしまうため、`DateTimeOffset`の利用や、内部的には`UtcNow`で保持して表示時にローカルタイムゾーンへ変換する設計が推奨されます。また、`DateTime`は値型(struct)なので、変数に代入すると値がコピーされる点もJavaの`Date`クラスなどとの違いとして意識しておくとよいでしょう。
まとめ
C#の日付操作は`DateTime`が基本で、`AddDays`のような分かりやすいメソッドで計算できます。文字列との相互変換には`ToString`と`TryParse`、タイムゾーンが重要な場面では`DateTimeOffset`も覚えておきましょう。
コメント
コメントを投稿