トレーニング
日付、時刻、タイム ゾーン
.NET には、日付、時刻、タイム ゾーンを表す型が用意されています。 この記事では、これらの型について説明します。
.NET には、基本的な DateTime 構造に加えて、タイム ゾーンの操作をサポートする次のクラスが用意されています。
-
このクラスを使用して、システムで定義済みのタイム ゾーンを操作したり、新しいタイム ゾーンを作成したり、日付と時刻をあるタイム ゾーンから別のタイム ゾーンに簡単に変換したりできます。 新しい開発では、TimeZone クラスの代わりに TimeZoneInfo クラスを使用します。
-
この構造体を使用して、UTC からのオフセット (または差) がわかっている日付と時刻を操作します。 DateTimeOffset 構造体は、日付と時刻の値を UTC からのその時刻のオフセットと結合します。 UTC との関係のため、個々の日付と時刻の値は、1 つの時点を明確に識別します。 これにより、DateTimeOffset 値は、DateTime 値よりもコンピューター間で移植性が高くなります。
以下のクラスが時間の操作をサポートします:
-
この構造体を使用して、経過時間や 2 つの日付の差などの時間間隔を表します。
-
日付のない時刻を表すには、この構造体を使用します。 時刻は、特定の日以外の時間、分、秒を表します。
TimeOnly
には00:00:00.0000000
から23:59:59.9999999
の範囲があります。 この型は、時刻を表すためにこれらの型を使用した場合に、コード内のDateTime
型とTimeSpan
型を置き換えるために使用できます。 詳細については、「DateOnly 構造体と TimeOnly 構造体を使用する方法」を参照してください。重要
TimeOnly は .NET Framework では使用できません。
-
これは、時間の抽象化を提供する基本クラスです。 現在の時刻を確認する一般的な方法は、
DateTime.UtcNow
またはDateTimeOffset.UtcNow
を使用することです。 ただし、これらの型では、"now" と見なされる内容を制御することはできません。なぜこれを制御する必要がありますか? テスト容易性。 たとえば、イベントの 1 日前にアラームを提供するイベント追跡アプリケーションを作成しているとします。 アプリのロジックは、1 時間ごとにイベント時間を確認し、イベントの 24 時間前にユーザーにアラートを送信することです。 アプリのテストを記述するときは、このロジックをテストするためにDateTimeOffset.UtcNow
をラップする独自の型を提供しますが、.NET ではこの抽象化クラスが提供されるようになりました。詳細については、「TimeProviderとは」を参照してください。
TimeProvider
型は .NET に含まれています。.NET Framework と .NET Standard の場合、
TimeProvider
は、Microsoft.Bcl.TimeProvider NuGet パッケージによって提供されます。
日付の操作をサポートする次のクラス:
-
日付のみを表す値を使用する場合は、この構造体を使用します。 日付は、1 日の開始日から終了日までの 1 日全体を表します。
DateOnly
には、9999-12-31
までの0001-01-01
の範囲があります。 また、この型は、特定の時刻を持たない月、日、年の組み合わせを表します。 コードでDateTime
型を使用して時刻を無視した日付を表していた場合は、その代わりにこの型を使用します。 詳細については、「DateOnly 構造体と TimeOnly 構造体を使用する方法」を参照してください。重要
DateOnly は .NET Framework では使用できません。
次のセクションでは、タイム ゾーンを操作し、あるタイム ゾーンから別のタイム ゾーンに日付と時刻を変換できるタイム ゾーン対応アプリケーションを作成するために必要な情報を提供します。
タイム ゾーンの概要
タイム ゾーン対応アプリケーションの作成に関連する用語、概念、および問題について説明します。
DateTime、DateTimeOffset、TimeSpan、TimeZoneInfo の選択
日付と時刻のデータを操作するときに、DateTime、DateTimeOffset、および TimeZoneInfo 型を使用するタイミングについて説明します。
ローカル システム で定義されているタイム ゾーンの検索
ローカル システムで見つかったタイム ゾーンを列挙する方法について説明します。
方法: コンピューター に存在するタイム ゾーンを列挙する
コンピューターのレジストリで定義されているタイム ゾーンを列挙し、ユーザーが一覧から定義済みのタイム ゾーンを選択できるようにする例を示します。
方法: 定義済みの UTC オブジェクトとローカル タイム ゾーン オブジェクトにアクセス
協定世界時とローカル タイム ゾーンにアクセスする方法について説明します。
方法: TimeZoneInfo オブジェクト をインスタンス化する
ローカル システム レジストリから TimeZoneInfo オブジェクトをインスタンス化する方法について説明します。
DateTimeOffset オブジェクト をインスタンス化する
DateTimeOffset オブジェクトをインスタンス化する方法と、DateTime 値を DateTimeOffset 値に変換する方法について説明します。
方法: 調整規則を使用せずにタイム ゾーンを作成
夏時間との間の切り替えをサポートしないカスタム タイム ゾーンを作成する方法について説明します。
方法: 調整ルールを使用してタイム ゾーンを作成
夏時間との間の 1 つ以上の切り替えをサポートするカスタム タイム ゾーンを作成する方法について説明します。
タイム ゾーンの保存と復元
タイム ゾーン データ TimeZoneInfo シリアル化と逆シリアル化のサポートについて説明し、これらの機能を使用できるシナリオの一部を示します。
方法: 埋め込みリソースの にタイム ゾーンを保存する
カスタム タイム ゾーンを作成し、その情報をリソース ファイルに保存する方法について説明します。
方法: 埋め込みリソース からタイム ゾーンを復元する
埋め込みリソース ファイルに保存されているカスタム タイム ゾーンをインスタンス化する方法について説明します。
日付と時刻を使用した算術演算の実行
DateTime 値と DateTimeOffset 値の加算、減算、および比較に関連する問題について説明します。
方法: 日付と時刻の算術 でタイム ゾーンを使用する
タイム ゾーンの調整規則を反映する日付と時刻の算術演算を実行する方法について説明します。
DateTime と DateTimeOffset 間の変換
DateTime 値と DateTimeOffset 値の間で変換する方法について説明します。
タイム ゾーン間の時刻の変換
あるタイム ゾーンから別のタイム ゾーンに時刻を変換する方法について説明します。
方法: あいまいな時刻を解決する方法
タイム ゾーンの標準時刻にマッピングして、あいまいな時刻を解決する方法について説明します。
方法: あいまいな時刻をユーザーが解決できるようにする
あいまいな現地時刻と協定世界時の間のマッピングをユーザーが判断できるようにする方法について説明します。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。