#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`も覚えておきましょう。

コメント

このブログの人気の投稿

#11 Rustで学ぶエラーハンドリングの基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本

#19 Goで学ぶテスト(単体テスト)の基本