この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

DateTime 構造体

 

公開日: 2016年7月

通常、日付や時刻として表現される瞬間を表します。

この型の .NET Framework ソース コードを参照するを参照してください。、 Reference Sourceです。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

[SerializableAttribute]
public struct DateTime : IComparable, IFormattable, IConvertible, 
	ISerializable, IComparable<DateTime>, IEquatable<DateTime>

名前説明
System_CAPS_pubmethodDateTime(Int32, Int32, Int32)

DateTime 構造体の新しいインスタンスを、指定した年、月、日に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Calendar)

DateTime 構造体の新しいインスタンスを、指定した暦の指定した年、月、および日に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32)

DateTime 構造体の新しいインスタンスを、指定した年、月、日、時、分、および秒に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

DateTime 構造体の新しいインスタンスを、指定した暦の指定した年、月、日、時、分、および秒に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

DateTime 構造体の新しいインスタンスを、指定した年、月、日、時、分、秒、および世界協定時刻 (UTC) または現地時刻に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32)

DateTime 構造体の新しいインスタンスを、指定した年、月、日、時、分、秒、およびミリ秒に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

DateTime 構造体の新しいインスタンスを、指定した暦の指定した年、月、日、時、分、秒、およびミリ秒に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)

DateTime 構造体の新しいインスタンスを、指定した暦の指定した年、月、日、時、分、秒、ミリ秒、および世界協定時刻 (UTC) または現地時刻に初期化します。

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

DateTime 構造体の新しいインスタンスを、指定した年、月、日、時、分、秒、ミリ秒、および世界協定時刻 (UTC) または現地時刻に初期化します。

System_CAPS_pubmethodDateTime(Int64)

DateTime 構造体の新しいインスタンスを、指定したタイマー刻み数に初期化します。

System_CAPS_pubmethodDateTime(Int64, DateTimeKind)

DateTime 構造体の新しいインスタンスを、指定したタイマー刻み数と世界協定時刻 (UTC) または現地時刻に初期化します。

名前説明
System_CAPS_pubpropertyDate

このインスタンスの日付の部分を取得します。

System_CAPS_pubpropertyDay

このインスタンスで表される月の日付を取得します。

System_CAPS_pubpropertyDayOfWeek

このインスタンスで表される曜日を取得します。

System_CAPS_pubpropertyDayOfYear

このインスタンスで表される年間積算日を取得します。

System_CAPS_pubpropertyHour

このインスタンスで表される日付の時間の部分を取得します。

System_CAPS_pubpropertyKind

このインスタンスが表す時刻の種類 (現地時刻、世界協定時刻 (UTC)、または、そのどちらでもない) を示す値を取得します。

System_CAPS_pubpropertyMillisecond

このインスタンスで表される日付のミリ秒の部分を取得します。

System_CAPS_pubpropertyMinute

このインスタンスで表される日付の分の部分を取得します。

System_CAPS_pubpropertyMonth

このインスタンスで表される日付の月の部分を取得します。

System_CAPS_pubpropertySystem_CAPS_staticNow

コンピューター上の現在の日時を現地時刻で表した DateTime オブジェクトを取得します。

System_CAPS_pubpropertySecond

このインスタンスで表される日付の秒の部分を取得します。

System_CAPS_pubpropertyTicks

このインスタンスの日付と時刻を表すタイマー刻み数を取得します。

System_CAPS_pubpropertyTimeOfDay

このインスタンスの時刻を取得します。

System_CAPS_pubpropertySystem_CAPS_staticToday

現在の日付を取得します。

System_CAPS_pubpropertySystem_CAPS_staticUtcNow

コンピューター上の現在の日時を世界協定時刻 (UTC) で表した DateTime オブジェクトを取得します。

System_CAPS_pubpropertyYear

このインスタンスで表される日付の年の部分を取得します。

名前説明
System_CAPS_pubmethodAdd(TimeSpan)

このインスタンスの値に、指定された TimeSpan の値を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddDays(Double)

このインスタンスの値に、指定された日数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddHours(Double)

このインスタンスの値に、指定された時間数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddMilliseconds(Double)

このインスタンスの値に、指定されたミリ秒数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddMinutes(Double)

このインスタンスの値に、指定された分数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddMonths(Int32)

このインスタンスの値に、指定された月数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddSeconds(Double)

このインスタンスの値に、指定された秒数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddTicks(Int64)

このインスタンスの値に、指定されたタイマー刻みの数を加算した新しい DateTime を返します。

System_CAPS_pubmethodAddYears(Int32)

このインスタンスの値に、指定された年数を加算した新しい DateTime を返します。

System_CAPS_pubmethodSystem_CAPS_staticCompare(DateTime, DateTime)

DateTime の 2 つのインスタンスを比較し、第 1 のインスタンスが第 2 のインスタンスよりも前か、同じか、それとも後かを示す整数を返します。

System_CAPS_pubmethodCompareTo(DateTime)

このインスタンスの値と指定した DateTime の値を比較し、このインスタンスの値が指定した DateTime の値よりも前か、同じか、または後かを示す整数を返します。

System_CAPS_pubmethodCompareTo(Object)

このインスタンスの値と指定した DateTime の値を含む指定したオブジェクトを比較し、このインスタンスの値が指定した DateTime の値よりも前か、同じか、または後かを示す整数を返します。

System_CAPS_pubmethodSystem_CAPS_staticDaysInMonth(Int32, Int32)

指定した月および年の日数を返します。

System_CAPS_pubmethodEquals(DateTime)

このインスタンスの値が、指定した DateTime インスタンスの値と等しいかどうかを示す値を返します。

System_CAPS_pubmethodSystem_CAPS_staticEquals(DateTime, DateTime)

DateTime の 2 つのインスタンスが同じ日付/時刻値を持っているかどうかを示す値を返します。

System_CAPS_pubmethodEquals(Object)

対象のインスタンスが、指定したオブジェクトに等しいかどうかを示す値を返します。(ValueType.Equals(Object) をオーバーライドします。)

System_CAPS_pubmethodSystem_CAPS_staticFromBinary(Int64)

64 ビットのバイナリ値を逆シリアル化し、元のシリアル化 DateTime オブジェクトを再構築します。

System_CAPS_pubmethodSystem_CAPS_staticFromFileTime(Int64)

指定された Windows ファイル時刻を同等の現地時刻に変換します。

System_CAPS_pubmethodSystem_CAPS_staticFromFileTimeUtc(Int64)

指定された Windows ファイル時刻を同等の UTC 時刻に変換します。

System_CAPS_pubmethodSystem_CAPS_staticFromOADate(Double)

指定した OLE オートメーション日付と等しい DateTime を返します。

System_CAPS_pubmethodGetDateTimeFormats()

このインスタンスの値を、標準の日時形式指定子によってサポートされるすべての文字列形式に変換します。

System_CAPS_pubmethodGetDateTimeFormats(Char)

このインスタンスの値を、指定した標準の日時形式指定子によってサポートされるすべての文字列表記に変換します。

System_CAPS_pubmethodGetDateTimeFormats(Char, IFormatProvider)

このインスタンスの値を、指定した標準日時形式指定子およびカルチャ固有の書式情報によってサポートされる、すべての文字列表記に変換します。

System_CAPS_pubmethodGetDateTimeFormats(IFormatProvider)

このインスタンスの値を、標準日時形式指定子および指定したカルチャ固有の書式情報によってサポートされる、すべての文字列形式に変換します。

System_CAPS_pubmethodGetHashCode()

このインスタンスのハッシュ コードを返します。(ValueType.GetHashCode() をオーバーライドします。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodGetTypeCode()

TypeCode 値型の DateTime を返します。

System_CAPS_pubmethodIsDaylightSavingTime()

DateTime のインスタンスが、現在のタイム ゾーンの夏時間の期間内であるかどうかを示します。

System_CAPS_pubmethodSystem_CAPS_staticIsLeapYear(Int32)

指定された年が閏年かどうかを示す値を返します。

System_CAPS_pubmethodSystem_CAPS_staticParse(String)

日付と時刻の文字列形式を等価の DateTime に変換します。

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider)

カルチャ固有の書式情報を使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider, DateTimeStyles)

カルチャ固有の書式情報と書式スタイルを使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String, IFormatProvider)

指定した書式とカルチャ固有の書式情報を使用して、指定した日付と時刻の文字列形式を等価の DateTime の値に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String, IFormatProvider, DateTimeStyles)

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。それ以外の場合は、例外がスローされます。

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String[], IFormatProvider, DateTimeStyles)

指定した書式の配列、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式の少なくとも 1 つと完全に一致する必要があります。それ以外の場合は、例外がスローされます。

System_CAPS_pubmethodSystem_CAPS_staticSpecifyKind(DateTime, DateTimeKind)

指定された DateTime と同じタイマー刻みの数を持つ新しい DateTime オブジェクトを、指定された DateTimeKind 値 (現地時刻、世界協定時刻 (UTC)、または、そのいずれでもないことを示す) に基づいて作成します。

System_CAPS_pubmethodSubtract(DateTime)

このインスタンスから指定した日付と時刻を減算します。

System_CAPS_pubmethodSubtract(TimeSpan)

このインスタンスから指定した期間を減算します。

System_CAPS_pubmethodToBinary()

現在の DateTime オブジェクトを 64 ビットのバイナリ値にシリアル化します。後で、この値を使って、DateTime オブジェクトを再構築できます。

System_CAPS_pubmethodToFileTime()

現在の DateTime オブジェクトの値を Windows ファイル時刻に変換します。

System_CAPS_pubmethodToFileTimeUtc()

現在の DateTime オブジェクトの値を Windows ファイル時刻に変換します。

System_CAPS_pubmethodToLocalTime()

現在の DateTime オブジェクトの値を現地時刻に変換します。

System_CAPS_pubmethodToLongDateString()

現在の DateTime オブジェクトの値を、それと等価な長い形式の日付の文字列形式に変換します。

System_CAPS_pubmethodToLongTimeString()

現在の DateTime オブジェクトの値を、それと等価な長い形式の時刻の文字列形式に変換します。

System_CAPS_pubmethodToOADate()

このインスタンスの値をそれと等価な OLE オートメーション日付に変換します。

System_CAPS_pubmethodToShortDateString()

現在の DateTime オブジェクトの値を、それと等価な短い形式の日付の文字列形式に変換します。

System_CAPS_pubmethodToShortTimeString()

現在の DateTime オブジェクトの値を、それと等価な短い形式の時刻の文字列形式に変換します。

System_CAPS_pubmethodToString()

現在のカルチャの書式指定規則を使用して、現在の DateTime オブジェクトの値をそれと等価な文字列形式に変換します。(ValueType.ToString() をオーバーライドします。)

System_CAPS_pubmethodToString(IFormatProvider)

指定したカルチャ固有の書式情報を使用して、現在の DateTime オブジェクトの値をそれと等価な文字列形式に変換します。

System_CAPS_pubmethodToString(String)

指定した形式および現在のカルチャの書式指定規則を使用して、現在の DateTime オブジェクトの値をそれと等価な文字列形式に変換します。

System_CAPS_pubmethodToString(String, IFormatProvider)

指定した書式およびカルチャ固有の書式情報を使用して、現在の DateTime オブジェクトの値をそれと等価の文字列形式に変換します。

System_CAPS_pubmethodToUniversalTime()

現在の DateTime オブジェクトの値を世界協定時刻 (UTC) に変換します。

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, DateTime)

指定した文字列形式の日時を対応する DateTime 表現に変換し、変換に成功したかどうかを示す値を返します。

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, IFormatProvider, DateTimeStyles, DateTime)

指定したカルチャ固有の書式情報と書式スタイルを使用して、指定した文字列形式の日付と時刻をそれと等価の DateTime に変換し、変換に成功したかどうかを示す値を返します。

System_CAPS_pubmethodSystem_CAPS_staticTryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)

指定した書式、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式と完全に一致する必要があります。 このメソッドは、変換に成功したかどうかを示す値を返します。

System_CAPS_pubmethodSystem_CAPS_staticTryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)

指定した書式の配列、カルチャ固有の書式情報、およびスタイルを使用して、指定した日付と時刻の文字列形式を等価の DateTime に変換します。 文字列形式の書式は、指定した書式の少なくとも 1 つと完全に一致する必要があります。 このメソッドは、変換に成功したかどうかを示す値を返します。

名前説明
System_CAPS_pubfieldSystem_CAPS_staticMaxValue

DateTime の最大有効値を表します。 このフィールドは読み取り専用です。

System_CAPS_pubfieldSystem_CAPS_staticMinValue

DateTime の最小有効値を表します。 このフィールドは読み取り専用です。

名前説明
System_CAPS_puboperatorSystem_CAPS_staticAddition(DateTime, TimeSpan)

指定した日付と時刻に指定した時間間隔を加算して、新しい日付と時刻を作成します。

System_CAPS_puboperatorSystem_CAPS_staticEquality(DateTime, DateTime)

DateTime の 2 つの指定したインスタンスが等しいかどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(DateTime, DateTime)

指定した DateTime が、指定したもう 1 つの DateTime より後の時刻かどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(DateTime, DateTime)

指定した 1 つの DateTime が、指定した別の DateTime と同じ日時またはそれより後の日時を表しているかどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticInequality(DateTime, DateTime)

DateTime の 2 つの指定したインスタンスが等しいかどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticLessThan(DateTime, DateTime)

指定した DateTime が、指定したもう 1 つの DateTime より前の時刻かどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(DateTime, DateTime)

指定した 1 つの DateTime が、指定した別の DateTime と同じ日時またはそれより前の日時を表しているかどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(DateTime, DateTime)

指定した日付と時刻から指定したもう 1 つの日付と時刻を減算して、時間間隔を返します。

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(DateTime, TimeSpan)

指定した日付と時刻から指定した時間間隔を減算して、新しい日付と時刻を返します。

名前説明
System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToBoolean(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToByte(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToChar(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDateTime(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 現在の DateTime オブジェクトを返します。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDecimal(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDouble(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt16(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt32(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt64(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSByte(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSingle(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToType(Type, IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 現在の DateTime オブジェクトを、指定された型のオブジェクトに変換します。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt16(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt32(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt64(IFormatProvider)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 この変換はサポートされていません。 このメソッドを使用しようとすると、InvalidCastException がスローされます。

System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo オブジェクトに、現在の DateTime オブジェクトをシリアル化するために必要なすべてのデータを格納します。

System_CAPS_noteメモ

この型の .NET Framework ソース コードを表示するを参照してください。、 Reference Sourceです。 ソース コードをオンラインで参照、オフラインで表示、リファレンスをダウンロードおよび; デバッグ中にソース (パッチや更新を含む) をステップsee instructions.

DateTime値の型が日付を表すし、西暦 9999 年 12 月 31 日までの値で 00時 00分: 00 (午前 0 時)、1 月 1 日から 0001 西暦 (一般的な時代 (年号)) を通じて午後 11時 59分: 59 時、タイムアウト(西暦)グレゴリオ暦です。

時刻の値はタイマー刻み、100 ナノ秒単位で測定されます、特定の日付は西暦 0001 年 1 月 1 日深夜 12時 00分されてからのタイマー刻みの数(西暦)GregorianCalendarカレンダー (うるう秒は追加ティックを除く)。 たとえば、31241376000000000l のタイマー刻み値は、日付、0100 年 1 月 01日金曜日午前 12時 00分: 00 時を表します。 ADateTime値が常に明確なコンテキストまたは既定の暦で表されます。

System_CAPS_noteメモ

分または秒などの他の時間間隔に変換することは、使用する必要がありますタイマー刻みの値を使用している場合、 TimeSpan.TicksPerDayTimeSpan.TicksPerHourTimeSpan.TicksPerMinuteTimeSpan.TicksPerSecond、またはTimeSpan.TicksPerMillisecondが変換を実行する定数。 たとえば、秒数を追加するによって表されるをタイマー刻み数が指定された、Secondのコンポーネント、DateTime値、式を使用することができますdateValue.Second + nTicks/Timespan.TicksPerSecondです。

このセクションの内容:

DateTime オブジェクトをインスタンス化します。
DateTime 値と、それぞれの文字列表現
文字列を DateTime 値に変換します。
バージョンの考慮事項
DateTime 値
DateTime の操作
DateTime の解決
DateTime とします。TimeSpan
DateTime 値、およびカレンダー
DateTime 値の永続化
COM 相互運用の考慮事項

新規に作成することができますDateTime次の方法のいずれかの値。

  • オーバー ロードのいずれかを呼び出すことによって、DateTimeコンス トラクター (年、月、日、タイマー刻みの数など) の日付と時刻の値の特定の要素を指定することをします。 次のステートメントのいずれかへの呼び出しを示しています、DateTimeコンス トラクターを特定の年、月、日、時間、分、および秒で日付を作成します。

    DateTime date1 = new DateTime(2008, 5, 1, 8, 30, 52);
    
  • 日付と時刻の値を宣言するため、コンパイラ固有の構文を使用します。 たとえば、Visual Basic の次のステートメントは、新しい初期化DateTime値。

    Dim date1 As Date = #5/1/2008 8:30:52AM#
    
  • 割り当てることによって、DateTimeオブジェクトのプロパティまたはメソッドによって返される日付と時刻の値。 次の例を割り当てます、現在の日付と時間、現在世界協定時刻 (UTC) 日付と時刻、および現在の日付に 3 つの新しいDateTime変数。

    DateTime date1 = DateTime.Now;
    DateTime date2 = DateTime.UtcNow;
    DateTime date3 = DateTime.Today;
    
  • 日付と時刻の値の文字列形式を解析します。 ParseParseExactTryParse、およびTryParseExactメソッドはすべて、文字列を等価の日付と時刻の値に変換します。 次の例では、Parseメソッドは、文字列解析に変換、DateTime値。

    string dateString = "5/1/2008 8:30:52 AM";
    DateTime date1 = DateTime.Parse(dateString, 
                              System.Globalization.CultureInfo.InvariantCulture); 
    

    注意してください、TryParseTryParseExactメソッドは、特定の文字列での有効な表現を含むかどうかを示すため、DateTime値だけでなく、変換を実行します。

  • 呼び出して、DateTime構造体の暗黙的な既定のコンス トラクターです。 (値型の暗黙的な既定のコンス トラクターの詳細については、「 値型 (C# リファレンス)。) コンパイラ サポートしているため、ほぼ同等のものを宣言する、DateTime明示的に日付と時刻を割り当てずの値。 次の例への呼び出し、 DateTime c# および Visual Basic での暗黙的な既定のコンス トラクターと同様に、 DateTime Visual Basic ではない割り当てが指定された変数の宣言。

    DateTime dat1 = new DateTime();
    // The following method call displays 1/1/0001 12:00:00 AM.
    Console.WriteLine(dat1.ToString(System.Globalization.CultureInfo.InvariantCulture));
    // The following method call displays True.
    Console.WriteLine(dat1.Equals(DateTime.MinValue));
    

内部的には、すべてDateTime値は 0001 年 1 月 1 日の午前 12時 00分: 00 からの経過時間 (100 ナノ秒間隔の数) タイマー刻みの数として表されます。 実際、DateTime値、またはファイルに書き込まれるときに、ユーザー インターフェイス要素に表示されるときにその値を表示する方法に依存しません。 外観、DateTime値は、書式設定操作の結果。 書式設定は、値を文字列形式に変換するプロセスです。

日付と時刻の値の外観は、カルチャ、国際標準、アプリケーションの要件、および個人用設定は、このような要因に依存しているため、DateTime構造体のオーバー ロードを使用して日付と時刻値を書式設定で柔軟性が大幅に向上を提供するそのToStringメソッドです。 既定値DateTime.ToString()メソッドは、現在のカルチャの短い形式の日付と長い形式の時刻パターンを使用して日付と時刻の値の文字列形式を返します。 次の例では、既定値DateTime.ToString()カルチャの日付を表示し、EN-US の短い日付パターンと長い時刻パターンを使用して、例が実行されたコンピューター上の現在のカルチャ。

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString());
// For en-US culture, displays 3/1/2008 7:00:00 AM

DateTime.ToString(IFormatProvider)メソッド短い形式の日付と長い形式の特定のカルチャの時刻パターンを使用して日付と時刻の値の文字列表現を返します。 次の例では、DateTime.ToString(IFormatProvider)日付し、時刻の FR-FR カルチャの短い日付パターンと長い時刻パターンを使用するメソッド。

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 01/03/2008 07:00:00

DateTime.ToString(String)メソッドは、標準またはカスタムの書式指定子によって定義され、現在のカルチャの書式指定規則を使用する形式で日付と時刻の文字列表現を返します。 次の例ではDateTime.ToString(String)例が実行されたコンピューター上の現在のカルチャ カルチャは EN-US の時刻のパターンと完全な日付を表示するメソッド。

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F"));
// Displays Saturday, March 01, 2008 7:00:00 AM

DateTime.ToString(String, IFormatProvider)メソッドは、特定の形式指定子によって定義され、特定のカルチャの書式指定規則を使用する形式で日付と時刻の文字列形式を返します。 次の例では、DateTime.ToString(String, IFormatProvider)完全な日付と時刻のパターンの FR-FR カルチャを表示するメソッド。

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F", new System.Globalization.CultureInfo("fr-FR")));
// Displays samedi 1 mars 2008 07:00:00

書式設定の詳細についてはDateTime値を参照してください標準の日時書式指定文字列およびカスタム日時書式指定文字列です。

日付と時刻を文字列形式に変換する解析では、DateTime値。 通常、日付と時刻の文字列では、アプリケーションで 2 つの異なる用法があります。

  • さまざまな形式を取得できるし、現在のカルチャまたは特定のカルチャの規則を反映する日時を表します。 など、アプリケーションは現在のカルチャが EN-US で「12/15/2013」または「2013 年 12 月 15 日」、として、日付の値を入力するユーザーを許可して、現在のカルチャが EN-GB「2013 年 15 月 12 日」または「2013 年 12 月 15日」として、日付の値を入力するユーザーを許可する可能性があります。

  • 日付と時刻を定義済みの形式で表します。 たとえば、アプリケーションには、カルチャ、アプリが実行されている、または日付が現在のカルチャの短い日付形式で入力することが必要とは無関係に「20130103」としての日付がシリアル化する可能性があります。

使用することができます、ParseまたはTryParseするカルチャで使用される共通の日付と時刻の形式のいずれかを反映する場合、文字列を変換する方法、DateTime値。 次の例は、使用する方法を示しています。TryParse数に別のカルチャに固有の形式で日付文字列に変換する、DateTime値。 英語 (英国) と呼び出しを現在のカルチャを変更、GetDateTimeFormats()日付と時刻の文字列の配列を生成する方法です。 これは、後、配列内の各要素を渡します、TryParseメソッドです。 この例から出力は、解析メソッドが正常に変換する、カルチャ固有の日付と時刻の文字列の各できたことを示しています。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

      DateTime date1 = new DateTime(2013, 6, 1, 12, 32, 30);
      List<string> badFormats = new List<String>();

      Console.WriteLine("{0,-37} {1,-19}\n", "Date String", "Date");
      foreach (var dateString in date1.GetDateTimeFormats()) {
         DateTime parsedDate;
         if (DateTime.TryParse(dateString, out parsedDate))
            Console.WriteLine("{0,-37} {1,-19}", dateString, DateTime.Parse(dateString));
         else
            badFormats.Add(dateString);
      } 

      // Display strings that could not be parsed.
      if (badFormats.Count > 0) {
         Console.WriteLine("\nStrings that could not be parsed: ");
         foreach (var badFormat in badFormats)
            Console.WriteLine("   {0}", badFormat);         
      }
   }
}
// The example displays the following output:
//       Date String                           Date               
//       
//       01/06/2013                            01/06/2013 00:00:00
//       01/06/13                              01/06/2013 00:00:00
//       1/6/13                                01/06/2013 00:00:00
//       1.6.13                                01/06/2013 00:00:00
//       2013-06-01                            01/06/2013 00:00:00
//       01 June 2013                          01/06/2013 00:00:00
//       1 June 2013                           01/06/2013 00:00:00
//       01 June 2013 12:32                    01/06/2013 12:32:00
//       01 June 2013 12:32                    01/06/2013 12:32:00
//       01 June 2013 12:32 PM                 01/06/2013 12:32:00
//       01 June 2013 12:32 PM                 01/06/2013 12:32:00
//       1 June 2013 12:32                     01/06/2013 12:32:00
//       1 June 2013 12:32                     01/06/2013 12:32:00
//       1 June 2013 12:32 PM                  01/06/2013 12:32:00
//       1 June 2013 12:32 PM                  01/06/2013 12:32:00
//       01 June 2013 12:32:30                 01/06/2013 12:32:30
//       01 June 2013 12:32:30                 01/06/2013 12:32:30
//       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
//       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
//       1 June 2013 12:32:30                  01/06/2013 12:32:30
//       1 June 2013 12:32:30                  01/06/2013 12:32:30
//       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
//       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
//       01/06/2013 12:32                      01/06/2013 12:32:00
//       01/06/2013 12:32                      01/06/2013 12:32:00
//       01/06/2013 12:32 PM                   01/06/2013 12:32:00
//       01/06/2013 12:32 PM                   01/06/2013 12:32:00
//       01/06/13 12:32                        01/06/2013 12:32:00
//       01/06/13 12:32                        01/06/2013 12:32:00
//       01/06/13 12:32 PM                     01/06/2013 12:32:00
//       01/06/13 12:32 PM                     01/06/2013 12:32:00
//       1/6/13 12:32                          01/06/2013 12:32:00
//       1/6/13 12:32                          01/06/2013 12:32:00
//       1/6/13 12:32 PM                       01/06/2013 12:32:00
//       1/6/13 12:32 PM                       01/06/2013 12:32:00
//       1.6.13 12:32                          01/06/2013 12:32:00
//       1.6.13 12:32                          01/06/2013 12:32:00
//       1.6.13 12:32 PM                       01/06/2013 12:32:00
//       1.6.13 12:32 PM                       01/06/2013 12:32:00
//       2013-06-01 12:32                      01/06/2013 12:32:00
//       2013-06-01 12:32                      01/06/2013 12:32:00
//       2013-06-01 12:32 PM                   01/06/2013 12:32:00
//       2013-06-01 12:32 PM                   01/06/2013 12:32:00
//       01/06/2013 12:32:30                   01/06/2013 12:32:30
//       01/06/2013 12:32:30                   01/06/2013 12:32:30
//       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
//       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
//       01/06/13 12:32:30                     01/06/2013 12:32:30
//       01/06/13 12:32:30                     01/06/2013 12:32:30
//       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
//       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
//       1/6/13 12:32:30                       01/06/2013 12:32:30
//       1/6/13 12:32:30                       01/06/2013 12:32:30
//       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
//       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
//       1.6.13 12:32:30                       01/06/2013 12:32:30
//       1.6.13 12:32:30                       01/06/2013 12:32:30
//       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
//       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
//       2013-06-01 12:32:30                   01/06/2013 12:32:30
//       2013-06-01 12:32:30                   01/06/2013 12:32:30
//       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
//       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
//       01 June                               01/06/2013 00:00:00
//       01 June                               01/06/2013 00:00:00
//       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
//       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
//       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
//       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
//       2013-06-01T12:32:30                   01/06/2013 12:32:30
//       12:32                                 22/04/2013 12:32:00
//       12:32                                 22/04/2013 12:32:00
//       12:32 PM                              22/04/2013 12:32:00
//       12:32 PM                              22/04/2013 12:32:00
//       12:32:30                              22/04/2013 12:32:30
//       12:32:30                              22/04/2013 12:32:30
//       12:32:30 PM                           22/04/2013 12:32:30
//       12:32:30 PM                           22/04/2013 12:32:30
//       2013-06-01 12:32:30Z                  01/06/2013 05:32:30
//       01 June 2013 19:32:30                 01/06/2013 19:32:30
//       01 June 2013 19:32:30                 01/06/2013 19:32:30
//       01 June 2013 07:32:30 PM              01/06/2013 19:32:30
//       01 June 2013 7:32:30 PM               01/06/2013 19:32:30
//       1 June 2013 19:32:30                  01/06/2013 19:32:30
//       1 June 2013 19:32:30                  01/06/2013 19:32:30
//       1 June 2013 07:32:30 PM               01/06/2013 19:32:30
//       1 June 2013 7:32:30 PM                01/06/2013 19:32:30
//       June 2013                             01/06/2013 00:00:00
//       June 2013                             01/06/2013 00:00:00

使用することができます、TryParseTryParseExact特定の形式または形式と一致する必要がある日付と時刻の文字列に変換する方法、DateTime値。 解析 methodby を使用して 1 つまたは複数または日付と時刻の書式指定文字列にパラメーターとして必要とされる書式または形式を指定します。 次の例では、 TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) "yyyyMMdd"形式または"HHmmss"形式のいずれかにする必要がある文字列を変換する方法のDateTime値。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formats = { "yyyyMMdd", "HHmmss" };
      string[] dateStrings = { "20130816", "20131608", "  20130816   ", 
                               "115216", "521116", "  115216  " };
      DateTime parsedDate;

      foreach (var dateString in dateStrings) {
         if (DateTime.TryParseExact(dateString, formats, null, 
                                    DateTimeStyles.AllowWhiteSpaces |
                                    DateTimeStyles.AdjustToUniversal,
                                    out parsedDate))
            Console.WriteLine("{0} --> {1:g}", dateString, parsedDate);
         else
            Console.WriteLine("Cannot convert {0}", dateString);
      }
   }
}
// The example displays the following output:
//       20130816 --> 8/16/2013 12:00 AM
//       Cannot convert 20131608
//         20130816    --> 8/16/2013 12:00 AM
//       115216 --> 4/22/2013 11:52 AM
//       Cannot convert 521116
//         115216   --> 4/22/2013 11:52 AM

ParseParseExact場合、メソッドが例外をスローに変換する文字列、DateTime値を解析できません。 TryParseTryParseExactを返し、Boolean変換が成功したか失敗したかどうかを示す値。 日付と時刻の文字列の解析操作の文字列は、ユーザーが入力される場合に特に傾向が高いエラー率があるし、例外処理は高価なため、必要がありますを使用するため、TryParseまたはTryParseExactシナリオでパフォーマンスが重要なまたは障害発生率が高いの対象は、変換は内のメソッドです。

日付と時刻の値を解析の詳細については、次を参照してください。.NET Framework における日付と時刻文字列の解析の解析です。

.NET Framework version 2.0 では、前に、DateTime構造には、プライベートを連結した未使用の 2 ビット フィールドから成る、64 ビット フィールドが含まれていますTicksを日付と時刻を表すタイマー刻みの数を表す符号なしフィールドは 62 ビット フィールドです。 値はTicksでフィールドを取得できます、Ticksプロパティ。

.NET Framework 2.0 以降で、DateTime構造には、タイマー刻みのフィールドを連結したプライベート Kind フィールドから成る 64 ビット フィールドが含まれています。 種類のフィールドは 2 ビット フィールドを示すかどうか、DateTime構造体は、現地時刻、世界協定時刻 (UTC)、または未指定のタイム ゾーンの時刻を表します。 Kind フィールドは、時刻のタイム ゾーン間でのではなく時刻の比較または算術演算の変換を実行するときに使用されます。 種類のフィールドの値を取得できます、Kindプロパティです。

System_CAPS_noteメモ

代わりのDateTimeは具体的にはタイム ゾーンの日付と時刻の値を操作の構造体のDateTimeOffset構造体。 DateTimeOffset構造体がプライベートで日付と時刻の情報を格納DateTimeフィールドおよびこれによって、日付し、時刻の分単位の時間 (utc) で異なりますプライベートInt16フィールドです。 できるようになります、DateTimeOffset値は、特定のタイム ゾーンの時刻を反映するように、DateTime値のみ UTC とローカルのタイム ゾーンの時刻を明確に反映できます。 使用する場合の詳細についてはのDateTime構造またはDateTimeOffset構造体の日付と時刻の値を使用する場合は、「DateTime、DateTimeOffset、TimeSpan、および TimeZoneInfo の使い分けです。

時刻値の説明については、DateTime型は、世界協定時刻 (UTC) の標準である国際的な識別できる名前グリニッジ標準時 (GMT) を使用して表されます。 協定世界時は、経度 0 °、UTC の原点測定される時間です。 夏時間から標準時では、UTC に適用されません。

現地時刻では、特定のタイム ゾーンを基準とします。 タイム ゾーンは UTC の原点からの時間単位で測定タイム ゾーンの転置されるタイム ゾーン オフセットに関連付けられます。 さらに、ローカル時刻は必要に応じて受けます夏時間を追加するか、1 日の長さを 1 時間を減算します。 その結果、ローカル時刻は UTC と必要な場合の夏時間の調整にタイム ゾーン オフセットを追加することによって計算されます。 UTC の原点のタイム ゾーン オフセットは 0 です。

UTC 時刻は、ファイル内の計算、比較、およびファイルを格納する日付と時刻に適しています。 現地時刻では、デスクトップ アプリケーションのユーザー インターフェイスでの表示に適しています。 (多くの Web アプリケーション) などのタイム ゾーン対応のアプリケーションも、他のタイム ゾーンの数を使用する必要があります。

場合、Kindのプロパティ、DateTimeオブジェクトがDateTimeKind.Unspecified、表された時間は、現地時刻、UTC 時刻、またはその他のいくつかのタイム ゾーンの時刻かどうか指定ではありません。

使用して、計算、DateTime構造体などAddまたはSubtract、構造体の値を変更しません。 代わりに、計算は、新しい返しますDateTime計算の結果を値構造体。

タイム ゾーン (たとえば、UTC と現地時刻、間、または 1 つのタイム ゾーン間で) 間の変換操作を考慮夏時間しますが、算術演算子および比較の操作がありません。

DateTime構造体自体を変換する 1 つのタイム ゾーンの制限付きサポートを提供しています。 使用することができますのToLocalTimeローカル時刻または UTC に変換する方法を使用することができますのToUniversalTime現地時刻から UTC に変換するメソッド。 ただし、変換メソッドはタイム ゾーンの完全なセットは利用で、TimeZoneInfoクラスです。 これらのメソッドを使用して、他のタイム ゾーンの時刻を世界中のタイム ゾーンのいずれかで時刻を変換できます。

計算および比較DateTimeオブジェクトは、オブジェクトが同じタイム ゾーンの時刻を表す場合にのみ意味のあります。 使用することができます、TimeZoneInfoを表すオブジェクト、DateTime値のタイム ゾーン、疎結合された 2 つがします。 (つまり、DateTimeオブジェクトには、その日付と時刻の値のタイム ゾーンを表す以外のオブジェクトを返すプロパティはありません、Kindプロパティです)。 このため、タイム ゾーン対応のアプリケーションでは、なんらかの外部機構を決定するタイム ゾーンに依存する必要があります、DateTimeオブジェクトが作成されました。 たとえば、両方をラップする構造体を使用する可能性があります、DateTime値、およびTimeZoneInfoオブジェクトを表す、DateTime値のタイム ゾーン。 UTC を計算およびとの比較の使用の詳細についてDateTime値を参照してください日付と時刻を使用した算術演算の実行です。

DateTimeメンバーは、カレンダーを指定するコンス トラクターを除く、その操作を実行する構成のグレゴリオ暦カレンダーを暗黙的に使用してから派生するパラメーターを持つメソッドIFormatProviderなどSystem.Globalization.DateTimeFormatInfoカレンダーを暗黙的に指定します。

メンバーによって操作、DateTimeうるう年と月の日数などのアカウントの詳細は考慮対象型。

その他の一般的な操作が 2 つDateTime値では、その文字列形式と日付/時刻値の変換が関係します。 変換するプロセス、DateTime値の文字列形式に書式設定操作です。 書式設定に関する詳細については、次を参照してください。 DateTime 値と、それぞれの文字列表現です。 日付と時刻を文字列形式を変換するプロセス、DateTime値は解析操作です。 解析の詳細については、次を参照してください。文字列を DateTime 値に変換するです。

System_CAPS_noteメモ

日付と時刻の算術演算を実行する代わりにDateTime経過時間の測定値を使用することができますのStopwatchクラスです。

Ticksプロパティは 1,000万分、秒単位での日付と時刻の値を表します、Millisecondプロパティは、日付と時刻の値の秒部分の 1/1000 を返します。 ただしを繰り返し呼び出すを使用している場合、DateTime.Nowプロパティを経過時間の測定、100 ミリ秒未満の小さな間隔で問題があると、値がによって返されることに注意してください、DateTime.Nowプロパティを Windows 7 および Windows 8 のシステムで約 15 ミリ秒単位の解像度を持つシステム クロックに依存します。

次の例は、現在の日付と時刻の値のシステム クロックの分解能に依存関係を示しています。 例では、外側のループが 20 回繰り返されます、内側のループが、外側のループを遅延するために使用します。 かどうか、外側のループ カウンターの値は 10 への呼び出し、Thread.Sleepメソッドには 5 ミリ秒の遅延が導入されています。 によって返される、ミリ秒単位の数に、出力の例に示す、DateTime.Now.Millisecondsプロパティへの呼び出し後にのみ変更Thread.Sleepです。

using System;
using System.Threading;

public class Example
{
   public static void Main()
   {
      String output = "";
      for (int ctr = 0; ctr <= 20; ctr++) {
         output += String.Format("{0}\n", DateTime.Now.Millisecond);
         // Introduce a delay loop.
         for (int delay = 0; delay <= 1000; delay++)
         {}

         if (ctr == 10) {
            output += "Thread.Sleep called...\n";
            Thread.Sleep(5);
         }
      }
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       Thread.Sleep called...
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143

DateTimeTimeSpan値の型が異なることをDateTime時間が瞬間を表しますをTimeSpan時間間隔を表します。 つまり、たとえば、1 つのインスタンスを減算することができますDateTimeから取得する別、TimeSpan時間間隔を表すオブジェクト。 正の値を追加することも、またはTimeSpan現在DateTimeを取得する、DateTimeを将来の日付を表す値です。

追加するかの時間間隔を減算するDateTimeオブジェクト。 正数または負数を指定できます、タイマー刻み数や、秒単位で表現できるまたはとして表現できます時間間隔、TimeSpanオブジェクト。

.NET Framework クラス ライブラリにはから派生するすべての calendar クラスの数が含まれています、Calendarクラスです。 それらは次のとおりです。

各カルチャの読み取り専用で定義された既定の暦を使用してCultureInfo.Calendarプロパティし、その読み取り専用で定義されている 1 つまたは複数の予定表サポートCultureInfo.OptionalCalendarsプロパティです。 特定で現在使用する暦CultureInfoによってオブジェクトが定義されているそのDateTimeFormatInfo.Calendarプロパティ; で見つかった予定表のいずれかにする必要があります、CultureInfo.OptionalCalendars配列。

カルチャの現在の暦は、そのカルチャのすべての書式設定操作で使用されます。 たとえば、ペルシア語 (イラン) のカルチャの既定の暦はの um で表されるウムアルクラ暦のUmAlQuraCalendarクラスです。 ときに、CultureInfoペルシア語 (イラン) のカルチャを表すオブジェクトを使用して日付と時刻の書式設定操作で、um ウムアルクラ暦が既定では、使用して、場合にのみ、構成のグレゴリオ暦カレンダーが使用されるカルチャのDateTimeFormatInfo.Calendarプロパティが変更された、次の例のようにします。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var value = new DateTime(2016, 5, 28);

      Console.WriteLine(value.ToString(faIR));

      faIR.DateTimeFormat.Calendar = new GregorianCalendar();
      Console.WriteLine(value.ToString(faIR));
   }
}
// The example displays the following output:
// 08/03/1395 12:00:00 ?.?
// 28/05/2016 12:00:00 ?.?

カルチャの現在の暦は、次の例のように、そのカルチャのすべて解析操作でも使用されます。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var value = DateTime.Parse("08/03/1395", faIR);
      Console.WriteLine(value.ToString(faIR));

      faIR.DateTimeFormat.Calendar = new GregorianCalendar();
      Console.WriteLine(value.ToString(faIR));
   }
}
// The example displays the following output:
//       08/03/1395 12:00:00 ?.?
//       28/05/2016 12:00:00 ?.?

インスタンスを作成することも、DateTime値要素を使用して、日付と時刻 (年、月、および日の数) などの特定のカレンダーを呼び出して、 DateTime コンス トラクターが含まれている、calendarパラメーターを渡すこと、Calendar暦を表すオブジェクト。 次の例から日付と時刻の要素を使用して、UmAlQuraCalendarカレンダーです。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var dat = new DateTime(1395, 8, 18, faIR.DateTimeFormat.Calendar);
      Console.WriteLine("Umm-al-Qura date: {0}", dat.ToString("d", faIR));
      Console.WriteLine("Gregorian date:   {0:d}", dat);
   }
}
// The example displays the following output:
//       Umm-al-Qura date: 18/08/1395
//       Gregorian date:   11/8/2016

DateTime含まないコンス トラクター、calendarパラメーターは、日付と時刻の要素が構成のグレゴリオ暦カレンダーの単位として表されることを想定します。

他のすべてのDateTimeプロパティとメソッドは、構成のグレゴリオ暦カレンダーを使用します。 たとえば、DateTime.Yearプロパティは、構成のグレゴリオ暦カレンダーにおける年を返しますとDateTime.IsLeapYear(Int32)メソッドを想定する、yearパラメーターは、構成のグレゴリオ暦カレンダーにおける年です。DateTime構成のグレゴリオ暦カレンダーを使用するメンバーの対応するメンバーがある、Calendarを特定のカレンダーを使用するクラス。 たとえば、Calendar.GetYearメソッドは、特定のカレンダーの年を返しますとCalendar.IsLeapYearメソッドでは、解釈、yearとして特定のカレンダーにおける年の数のパラメーターです。 次の例では、両方を使用、DateTimeとの対応するメンバー、UmAlQuraCalendarクラスです。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var cal = faIR.DateTimeFormat.Calendar;
      var dat = new DateTime(1395, 8, 18, cal);
      Console.WriteLine("Using the Umm-al-Qura calendar:");
      Console.WriteLine("Date: {0}", dat.ToString("d", faIR));
      Console.WriteLine("Year: {0}", cal.GetYear(dat));
      Console.WriteLine("Leap year: {0}\n", 
                        cal.IsLeapYear(cal.GetYear(dat)));

      Console.WriteLine("Using the Gregorian calendar:");
      Console.WriteLine("Date: {0:d}", dat);
      Console.WriteLine("Year: {0}", dat.Year);
      Console.WriteLine("Leap year: {0}", DateTime.IsLeapYear(dat.Year));
   }
}
// The example displays the following output:
//       Using the Umm-al-Qura calendar:
//       Date: 18/08/1395
//       Year: 1395
//       Leap year: True
//       
//       Using the Gregorian calendar:
//       Date: 11/8/2016
//       Year: 2016
//       Leap year: True

ただし、DateTime構造が含まれますDayOfWeek構成のグレゴリオ暦カレンダーにおける週の曜日を表すプロパティをその年の週番号を取得できるようにするメンバーは含まれません。 年間の週を取得する呼び出し、予定表の個別のCalendar.GetWeekOfYearメソッドです。 具体的な例を次に示します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var umAlQura = faIR.DateTimeFormat.Calendar;
      var dat = new DateTime(1395, 8, 18, umAlQura);
      Console.WriteLine("Using the Umm-al-Qura calendar:");
      Console.WriteLine("Date: {0}", dat.ToString("d", faIR));
      Console.WriteLine("Day of Week: {0}", umAlQura.GetDayOfWeek(dat));
      Console.WriteLine("Week of year: {0}\n", 
                        umAlQura.GetWeekOfYear(dat, CalendarWeekRule.FirstDay, 
                                               DayOfWeek.Sunday));

      var greg = new GregorianCalendar(); 
      Console.WriteLine("Using the Gregorian calendar:");
      Console.WriteLine("Date: {0:d}", dat);
      Console.WriteLine("Day of Week: {0}", dat.DayOfWeek);
      Console.WriteLine("Week of year: {0}", 
                         greg.GetWeekOfYear(dat, CalendarWeekRule.FirstDay, 
                                            DayOfWeek.Sunday));
   }
}
// The example displays the following output:
//       Using the Umm-al-Qura calendar:
//       Date: 18/08/1395
//       Day of Week: Tuesday
//       Week of year: 34
//       
//       Using the Gregorian calendar:
//       Date: 11/8/2016
//       Day of Week: Tuesday
//       Week of year: 46

日付と暦の詳細については、次を参照してください。カレンダーの使用です。

永続化できるDateTime4 つの方法で値。

どの手法を選択して、関係なくことを確認を復元するルーチン、DateTime値のデータが失われるまたは例外をスローしません。 DateTime値には、ラウンド トリップの必要があります。 つまり、元の値と復元された値は同じはずです。 場合に、元のDateTime値が 1 つの時間の時点を表すが復元されたときの同じ時点を識別する必要があります。

正常に復元するDateTime文字列として保存される値はこれらの規則に従います。

  • に関するカルチャ固有の書式指定文字列として保存されるときを復元するときに同じ想定をすることです。 文字列を現在のカルチャが上に保存されたシステムのカルチャからさまざまなシステムに復元できることを呼び出して、ToStringのオーバー ロードを呼び出し、インバリアント カルチャの規則を使用して文字列を保存、Parse(String, IFormatProvider, DateTimeStyles)またはTryParse(String, IFormatProvider, DateTimeStyles, DateTime)インバリアント カルチャの規則を使用して、文字列を復元するオーバー ロードします。 使用しないで、 ToString()Parse(String)、またはTryParse(String, DateTime)オーバー ロードは、現在のスレッド カルチャの規則を使用します。

  • データは、1 つの時点を表している場合は、場合でも、別のタイム ゾーンを使用するシステムで復元が復元されたときの同じ時点を表すことを確認します。 これを行うには、変換する、DateTime保存する前に値を世界協定時刻 (UTC)。 タイム ゾーン情報と共に値をシリアル化することができますもこの方法の詳細については、次を参照してください。 DateTime のシリアル化とタイム ゾーン データです。

永続化するときに作成される最も一般的なエラーDateTime値を文字列としては、既定値または現在のカルチャの書式指定規則に依存します。 問題は、現在のカルチャが保存および復元の文字列とは異なる場合に発生します。 次の例は、これらの問題を示しています。 英語 (米国) をここでは、現在のカルチャの書式指定規則を使用して 5 つの日付を保存します。 英語 (英国) をここでは、現在のカルチャの書式指定規則を使用して日付が復元されます。 2 つのカルチャの書式指定規則が異なるため、日付の 2 つを復元できないし、残りの 3 つの日付が正しく解釈されずです。 また、元の日付と時刻の値が 1 つの時点で、復元されたを表している場合は時間が正しくないタイム ゾーン情報が失われるためです。

using System;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   private const string filename = @".\BadDates.txt";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      string output = null;

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         output += dates[ctr].ToString() + (ctr != dates.Length - 1 ? "|" : "");
      }
      StreamWriter sw = new StreamWriter(filename);
      sw.Write(output);
      sw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      StreamReader sr = new StreamReader(filename);
      string[] inputValues = sr.ReadToEnd().Split( new char[] { '|' } , 
                                                  StringSplitOptions.RemoveEmptyEntries);
      sr.Close();
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var inputValue in inputValues) {
         DateTime dateValue;
         if (DateTime.TryParse(inputValue, out dateValue)) {
            Console.WriteLine("'{0}' --> {1:f}", inputValue, dateValue);
         }
         else {
            Console.WriteLine("Cannot parse '{0}'", inputValue);   
         }
      }
      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       Cannot parse //6/14/2014 6:32:00 AM//
//       //7/10/2014 11:49:00 PM// --> 07 October 2014 23:49
//       //1/10/2015 1:16:00 AM// --> 01 October 2015 01:16
//       Cannot parse //12/20/2014 9:45:00 PM//
//       //6/2/2014 3:14:00 PM// --> 06 February 2014 15:14
//       Restored dates...

ラウンドト リップするDateTime値が正常には、次の手順します。

  1. 値は、時間の 1 つの瞬間を表している場合に変換現地時刻から UTC に呼び出すことによって、ToUniversalTimeメソッドです。

  2. 呼び出して、日付をそれぞれの文字列表現に変換、ToString(String, IFormatProvider)またはString.Format(IFormatProvider, String, Object[])オーバー ロードします。 指定して、インバリアント カルチャの書式指定規則を使用してCultureInfo.InvariantCultureとして、provider引数。 "O"または"R"を使用して、値のラウンドト リップはことを指定します。

  3. 呼び出すと、Parse(String, IFormatProvider, DateTimeStyles)またはTryParse(String, IFormatProvider, DateTimeStyles, DateTime)メソッドです。

永続化を復元するDateTimeデータ損失なし、値、次の操作します。

  1. 呼び出してデータを解析、ParseExactまたはTryParseExactオーバー ロードします。 指定CultureInfo.InvariantCultureとして、provider引数と同じ標準書式指定文字列に使用した使用、format引数の変換中にします。 含める、DateTimeStyles.RoundtripKind値で、styles引数。

  2. 場合のDateTime値は、時間、呼び出しの 1 つの時点を表すのToLocalTimeを現地時刻 (utc) から解析した日付に変換します。

次の例、インバリアント カルチャと、"O"標準書式指定文字列を使用していることを確認DateTime保存および復元される値は、システム、カルチャ、またはソースとターゲット システムのタイム ゾーンに関係なく同じ瞬間を表します。

using System;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   private const string filename = @".\Dates.txt";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      string output = null;

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         output += dates[ctr].ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) 
                   + (ctr != dates.Length - 1 ? "|" : "");
      }
      StreamWriter sw = new StreamWriter(filename);
      sw.Write(output);
      sw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      StreamReader sr = new StreamReader(filename);
      string[] inputValues = sr.ReadToEnd().Split( new char[] { '|' } , 
                                                  StringSplitOptions.RemoveEmptyEntries);
      sr.Close();
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var inputValue in inputValues) {
         DateTime dateValue;
         if (DateTime.TryParseExact(inputValue, "O", CultureInfo.InvariantCulture, 
                               DateTimeStyles.RoundtripKind, out dateValue)) {
            Console.WriteLine("'{0}' --> {1:f}", 
                              inputValue, dateValue.ToLocalTime());
         }
         else {
            Console.WriteLine("Cannot parse '{0}'", inputValue);   
         }
      }
      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       '2014-06-14T13:32:00.0000000Z' --> 14 June 2014 14:32
//       '2014-07-11T06:49:00.0000000Z' --> 11 July 2014 07:49
//       '2015-01-10T09:16:00.0000000Z' --> 10 January 2015 09:16
//       '2014-12-21T05:45:00.0000000Z' --> 21 December 2014 05:45
//       '2014-06-02T22:14:00.0000000Z' --> 02 June 2014 23:14
//       Restored dates...

永続化ではなく、DateTime値を文字列としてとして保持できます、Int64タイマー刻みの数を表す値です。 この場合、システムのカルチャを考慮する必要がない、DateTime値が永続化し、上に復元します。

永続化するをDateTime値を整数として。

  • 場合、DateTimeの値の 1 つの時点を表す、呼び出すことによってを UTC に変換して、ToUniversalTimeメソッドです。

  • によって表されたタイマー刻みの数を取得、DateTime値からそのTicksプロパティです。

復元する、DateTime整数として永続化された値。

  1. 新しいインスタンスを作成DateTimeオブジェクトを渡すことによって、Int64値をDateTime(Int64)コンス トラクターです。

  2. 場合のDateTime値は、特定の時点を表すからに変換する (utc) のローカル時刻を呼び出してのToLocalTimeメソッドです。

次の例の配列が引き続き発生するDateTimeシステム上で、米国の整数値として値表示します。 UTC ゾーンのシステムでそれが復元されます。 整数を格納しているファイルが含まれています、Int32の合計数を示す値Int64直後にその値。

using System;
using System.Globalization;
using System.IO;
using System.Threading;

class Example
{
   private const string filename = @".\IntDates.bin";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      long[] ticks = new long[dates.Length];
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         ticks[ctr] = dates[ctr].ToUniversalTime().Ticks; 
      }
      FileStream fs = new FileStream(filename, FileMode.Create);
      BinaryWriter bw = new BinaryWriter(fs);
      bw.Write(ticks.Length);
      foreach (var tick in ticks)
         bw.Write(tick);

      bw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      FileStream fs = new FileStream(filename, FileMode.Open);
      BinaryReader br = new BinaryReader(fs);
      int items;
      DateTime[] dates;

      try { 
         items = br.ReadInt32();
         dates = new DateTime[items];

         for (int ctr = 0; ctr < items; ctr++) {
            long ticks = br.ReadInt64();
            dates[ctr] = new DateTime(ticks).ToLocalTime();
         }
      }   
      catch (EndOfStreamException) {
         Console.WriteLine("File corruption detected. Unable to restore data...");
         return;
      }   
      catch (IOException) {
         Console.WriteLine("Unspecified I/O error. Unable to restore data...");
         return;
      }
      // Thrown during array initialization.
      catch (OutOfMemoryException) {
         Console.WriteLine("File corruption detected. Unable to restore data...");
         return;
      }
      finally {      
         br.Close();
      }   

      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var value in dates)
         Console.WriteLine(value.ToString("f"));

      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

保存ではなくDateTimeを値として文字列または整数に変換する必要があるしをもう一度DateTime永続化できる値、DateTime値をストリームまたはファイル、および 復元するシリアル化を使用して逆シリアル化を通じてします。 この場合、DateTimeによって指定されたオブジェクトの形式でデータをシリアル化し、は逆シリアル化時にオブジェクトが復元されます。 シリアライザーは、フォーマッタなどXmlSerializerまたはBinaryFormatter、シリアル化および逆シリアル化のプロセスを処理します。 シリアル化と、.NET Framework でサポートされているシリアル化の種類の詳細については、次を参照してください。シリアル化です。

次の例ではXmlSerializerクラスをシリアル化および逆シリアル化DateTimeすべてを表す値 leap 21 世紀の年の日数。 出力は、現在のカルチャが英語 (英国) システムでこの例を実行している場合、結果を表します。 私たちを逆シリアル化したため、DateTimeオブジェクト自体のコードは、日付と時刻の形式のカルチャの違いを処理する必要はありません。

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Xml.Serialization;

class Example
{
   private const string filename = @".\LeapYears.xml";

   public static void Main()
   {
      // Serialize the data.
      List<DateTime> leapYears = new List<DateTime>();
      for (int year = 2000; year <= 2100; year += 4) {
         if (DateTime.IsLeapYear(year)) 
            leapYears.Add(new DateTime(year, 2, 29));
      }
      DateTime[] dateArray = leapYears.ToArray();

      XmlSerializer serializer = new XmlSerializer(dateArray.GetType());
      TextWriter sw = new StreamWriter(filename);

      try {
         serializer.Serialize(sw, dateArray);
      }
      catch (InvalidOperationException e) {
         Console.WriteLine(e.InnerException.Message);         
      }
      finally {
         if (sw != null) sw.Close();
      }   

      // Deserialize the data.
      DateTime[] deserializedDates;
      using (FileStream fs = new FileStream(filename, FileMode.Open)) {
         deserializedDates = (DateTime[]) serializer.Deserialize(fs);
      } 

      // Display the dates.
      Console.WriteLine("Leap year days from 2000-2100 on an {0} system:",
                        Thread.CurrentThread.CurrentCulture.Name);
      int nItems = 0;
      foreach (var dat in deserializedDates) {
         Console.Write("   {0:d}     ", dat);
         nItems++;
         if (nItems % 5 == 0) 
               Console.WriteLine(); 
      }
   }
}
// The example displays the following output:
//    Leap year days from 2000-2100 on an en-GB system:
//       29/02/2000       29/02/2004       29/02/2008       29/02/2012       29/02/2016
//       29/02/2020       29/02/2024       29/02/2028       29/02/2032       29/02/2036
//       29/02/2040       29/02/2044       29/02/2048       29/02/2052       29/02/2056
//       29/02/2060       29/02/2064       29/02/2068       29/02/2072       29/02/2076
//       29/02/2080       29/02/2084       29/02/2088       29/02/2092       29/02/2096

前の例には、時間の情報が含まれていません。 ただし場合、DateTime必要がありますに変換する現地時刻から UTC を呼び出してシリアル化する前に、値は特定の時点を表し、現地時刻で表される、ToUniversalTimeメソッドです。 後に、この逆シリアル化する必要がありますに変換する (utc) から現地時刻を呼び出して、ToLocalTimeメソッドです。 次の例では、BinaryFormatterをシリアル化するクラスDateTime米国でのシステム上のデータ太平洋標準時ゾーンと (utc) ゾーンのシステムでのシリアル化を解除します。

using System;
using System.IO;
using System.Globalization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;

class Example
{
   private const string filename = @".\Dates.bin";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      FileStream fs = new FileStream(filename, FileMode.Create);
      BinaryFormatter bin = new BinaryFormatter();

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         dates[ctr] = dates[ctr].ToUniversalTime();
      }
      bin.Serialize(fs, dates);
      fs.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

      FileStream fs = new FileStream(filename, FileMode.Open);
      BinaryFormatter bin = new BinaryFormatter();
      DateTime[] dates = (DateTime[]) bin.Deserialize(fs);
      fs.Close();

      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var value in dates)
         Console.WriteLine(value.ToLocalTime().ToString("f"));

      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

前の例がすべてのように仮定DateTime値ローカル時間として表され、ソースとターゲット システム上の同じ時点が反映されるように、UTC と現地時刻までの値を変換します。 DateTime値は、local 以外のタイム ゾーンと UTC の時間の時点も反映可能性があります。 ここでは、ため、DateTimeタイム ゾーンに対応する構造体は、両方のシリアル化する必要がある、DateTime値、およびTimeZoneInfoそのタイム ゾーンを表すオブジェクト。 これを行うには、その結果、フィールドは、両方を含める型を作成、DateTime値とそのタイム ゾーン。 次の例では定義、DateWithTimeZone構造を行う方法を示しています。

using System;

namespace DateTimeExtensions
{
   [Serializable] public struct DateWithTimeZone
   {
      private TimeZoneInfo tz;
      private DateTime dt;

      public DateWithTimeZone(DateTime dateValue, TimeZoneInfo timeZone)
      {
         dt = dateValue;
         if (timeZone == null)
            tz = TimeZoneInfo.Local;
         else
            tz = timeZone;
      }   

      public TimeZoneInfo TimeZone 
      { get { return (tz); }
        set { tz = value; } }

      public DateTime DateTime 
      { get { return (dt); }
        set { dt = value; } }
   }
}
System_CAPS_important重要

DateWithTimeZoneおよびの配列を逆シリアル化する次の 2 つの例についてで構造体が使用されるDateWithTimeZoneオブジェクト。 コード例を実行するには、まずを含むクラス ライブラリを作成、DateWithTimeZone構造、およびそれぞれの例をコンパイルするときにへの参照を追加します。

使用してのDateWithTimeZone構造体、日付と時刻とタイム ゾーン情報を次に保持することができます。 次の例では、BinaryFormatterの配列をシリアル化するクラスDateWithTimeZoneオブジェクト。

using System;
using DateTimeExtensions;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Example
{
   public static void Main()
   {
      DateWithTimeZone[] dates= { new DateWithTimeZone(new DateTime(2014, 8, 9, 19, 30, 0),  
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")),
                                  new DateWithTimeZone(new DateTime(2014, 8, 15, 19, 0, 0), 
                                      TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")),  
                                  new DateWithTimeZone(new DateTime(2014, 8, 22, 19, 30, 0),  
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")),  
                                  new DateWithTimeZone(new DateTime(2014, 8, 28, 19, 0, 0), 
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")) };
      FileStream fs = new FileStream(@".\Schedule.bin", FileMode.Create);
      BinaryFormatter formatter = new BinaryFormatter();
      try {
         formatter.Serialize(fs, dates);
         // Display dates.
         foreach (var date in dates) {
            TimeZoneInfo tz = date.TimeZone;
            Console.WriteLine("{0} {1}", date.DateTime, 
                              tz.IsDaylightSavingTime(date.DateTime) ? 
                              tz.DaylightName : tz.StandardName);      
         }
      }
      catch (SerializationException e) {
         Console.WriteLine("Serialization failed. Reason: {0}", e.Message);
      }   
      finally {
         if (fs != null) fs.Close();
      }
   }
}
// The example displays the following output:
//       8/9/2014 7:30:00 PM Eastern Daylight Time
//       8/15/2014 7:00:00 PM Pacific Daylight Time
//       8/22/2014 7:30:00 PM Eastern Daylight Time
//       8/28/2014 7:00:00 PM Eastern Daylight Time

次の例は、呼び出し、BinaryFormatter.Deserializeメソッドを逆シリアル化します。

using System;
using DateTimeExtensions;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Example
{
   private const string filename = @".\Schedule.bin";

   public static void Main()
   {
      FileStream fs;
      if (File.Exists(filename))
         fs = new FileStream(filename, FileMode.Open);
      else {
         Console.WriteLine("Unable to find file to deserialize.");
         return;
      }

      BinaryFormatter formatter = new BinaryFormatter();
      DateWithTimeZone[] dates;
      try {
         dates = (DateWithTimeZone[]) formatter.Deserialize(fs);
         // Display dates.
         foreach (var date in dates) {
            TimeZoneInfo tz = date.TimeZone;
            Console.WriteLine("{0} {1}", date.DateTime, 
                              tz.IsDaylightSavingTime(date.DateTime) ? 
                              tz.DaylightName : tz.StandardName);      
         }
      }
      catch (SerializationException e) {
         Console.WriteLine("Deserialization failed. Reason: {0}", e.Message);
      }   
      finally {
         if (fs != null) fs.Close();
      }
   }
}
// The example displays the following output:
//       8/9/2014 7:30:00 PM Eastern Daylight Time
//       8/15/2014 7:00:00 PM Pacific Daylight Time
//       8/22/2014 7:30:00 PM Eastern Daylight Time
//       8/28/2014 7:00:00 PM Eastern Daylight Time

ADateTimeラウンドト リップさせるには、COM アプリケーションに転送し、次が管理対象のアプリケーションに戻される値といいます。 ただしをDateTime時刻のみを指定する値は変わりません期待どおりに往復します。

ラウンドト リップするのみ時刻場合、午後 3 時、最後の日付と時刻などは 1899 年 12 月 30日西暦午後 3 時、年 1 月 1 日ではなく西暦 0001 午後 3時 00分これは、.NET Framework や COM は、既定の日付、時刻のみが指定されている場合を引き継ぐために発生します。 ただし、COM と見なされます基準日西暦 1899 年 12 月 30 日の中に、.NET Framework には、西暦 0001 年 1 月 1 日の基本日付が前提としています

COM に .NET Framework から時刻のみが渡されると、特別な処理は実行時間を COM で使用される形式に変換します。 .NET Framework に COM から時刻のみが渡されるは、正当な日付と時刻、1899 年 12 月 30 日までが破損しているために特別な処理が実行されません。 これは、.NET Framework や COM 日付を保持する日付は、COM からのラウンドト リップを起動する場合にも意味します。

.NET Framework や COM の動作はことを意味する場合、アプリケーションのラウンドト リップ、DateTimeだけ時間を指定する、アプリケーションを変更または最後から誤った日付を無視することを忘れないでくださいDateTimeオブジェクト。

次の例では、約を比較する方法と同じDateTime等しい宣言するときに相違点の小さな余白の受け入れ値。

using System;

class DateTimeTester 
{
   static bool RoughlyEquals(DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds)
   {
      long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds 
                                                     % frequencyInSeconds;

      delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;

      return Math.Abs(delta) < windowInSeconds;
	}

	public static void Main() 
	{
      int window = 10;
      int freq = 60 * 60 * 2; // 2 hours;

      DateTime d1 = DateTime.Now;

      DateTime d2 = d1.AddSeconds(2 * window);
      DateTime d3 = d1.AddSeconds(-2 * window);
      DateTime d4 = d1.AddSeconds(window / 2);
      DateTime d5 = d1.AddSeconds(-window / 2);

      DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
      DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
      DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
      DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

      Console.WriteLine("d1 ({0}) ~= d1 ({1}): {2}",
                        d1, d1, RoughlyEquals(d1, d1, window, freq));
      Console.WriteLine("d1 ({0}) ~= d2 ({1}): {2}", 
                        d1, d2, RoughlyEquals(d1, d2, window, freq));
      Console.WriteLine("d1 ({0}) ~= d3 ({1}): {2}", 
                        d1, d3, RoughlyEquals(d1, d3, window, freq));
      Console.WriteLine("d1 ({0}) ~= d4 ({1}): {2}", 
                        d1, d4, RoughlyEquals(d1, d4, window, freq));
      Console.WriteLine("d1 ({0}) ~= d5 ({1}): {2}", 
                        d1, d5, RoughlyEquals(d1, d5, window, freq));

      Console.WriteLine("d1 ({0}) ~= d6 ({1}): {2}", 
                        d1, d6, RoughlyEquals(d1, d6, window, freq));
      Console.WriteLine("d1 ({0}) ~= d7 ({1}): {2}", 
                        d1, d7, RoughlyEquals(d1, d7, window, freq));
      Console.WriteLine("d1 ({0}) ~= d8 ({1}): {2}", 
                        d1, d8, RoughlyEquals(d1, d8, window, freq));
      Console.WriteLine("d1 ({0}) ~= d9 ({1}): {2}", 
                        d1, d9, RoughlyEquals(d1, d9, window, freq));
	}
}
// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

この種類のすべてのメンバーでは、スレッド セーフです。 インスタンスの状態を変更する表示されるメンバーは、実際に新しい値で初期化された新しいインスタンスを返します。 として、他の種類と読み取りと書き込みをこの型のインスタンスを含む共有変数を保護する必要があるスレッド セーフを確保するロックによってです。

System_CAPS_caution注意

この型のインスタンスを割り当てることはないすべてのハードウェア プラットフォームでスレッド セーフそのインスタンスのバイナリ表現が大きすぎるため、1 つのアトミックな操作で割り当てる可能性があるためです。

トップに戻る
表示: