DateTimeOffset オブジェクトのインスタンス化Instantiating a DateTimeOffset object

DateTimeOffset 構造体には、新しい DateTimeOffset 値を作成するさまざまな方法が用意されています。The DateTimeOffset structure offers a number of ways to create new DateTimeOffset values. これらの多くは、新しい DateTime 値をインスタンス化するために使用できるメソッドに直接対応しています。拡張機能を使用すると、世界協定時刻 (UTC) からの日付と時刻の値のオフセットを指定できます。Many of them correspond directly to the methods available for instantiating new DateTime values, with enhancements that allow you to specify the date and time value's offset from Coordinated Universal Time (UTC). 具体的には、次の方法で DateTimeOffset 値をインスタンス化できます。In particular, you can instantiate a DateTimeOffset value in the following ways:

  • 日付と時刻のリテラルを使用する。By using a date and time literal.

  • DateTimeOffset コンストラクターを呼び出す。By calling a DateTimeOffset constructor.

  • 値を DateTimeOffset 値に暗黙的に変換する。By implicitly converting a value to DateTimeOffset value.

  • 日付と時刻の文字列形式を解析する。By parsing the string representation of a date and time.

このトピックでは、新しい DateTimeOffset 値をインスタンス化するこれらの方法を示す、より詳細なコード例を示します。This topic provides greater detail and code examples that illustrate these methods of instantiating new DateTimeOffset values.

日付と時刻のリテラルDate and time literals

それをサポートする言語の場合、DateTime 値をインスタンス化する最も一般的な方法の1つは、ハードコーディングされたリテラル値として日付と時刻を指定することです。For languages that support it, one of the most common ways to instantiate a DateTime value is to provide the date and time as a hard-coded literal value. たとえば、次の Visual Basic コードでは、10:00 AM で2008年1月1日の値を持つ DateTime オブジェクトを作成します。For example, the following Visual Basic code creates a DateTime object whose value is January 1, 2008, at 10:00 AM.

Dim literalDate1 As Date = #05/01/2008 8:06:32 AM#
Console.WriteLine(literalDate1.ToString() )
' Displays:
'              5/1/2008 8:06:32 AM

DateTimeOffset 値は、DateTime リテラルをサポートする言語を使用するときに、日付と時刻のリテラルを使用して初期化することもできます。DateTimeOffset values can also be initialized using date and time literals when using languages that support DateTime literals. たとえば、次の Visual Basic コードでは、DateTimeOffset オブジェクトを作成します。For example, the following Visual Basic code creates a DateTimeOffset object.

Dim literalDate As DateTimeOffset = #05/01/2008 8:06:32 AM#
Console.WriteLine(literalDate.ToString() )
' Displays:
'              5/1/2008 8:06:32 AM -07:00

コンソール出力に示すように、この方法で作成された DateTimeOffset 値には、ローカルタイムゾーンのオフセットが割り当てられます。As the console output shows, the DateTimeOffset value created in this way is assigned the offset of the local time zone. つまり、コードが別のコンピューターで実行されている場合、文字リテラルを使用して割り当てられた DateTimeOffset 値は、単一の時点を識別しません。This means that a DateTimeOffset value assigned using a character literal does not identify a single point of time if the code is run on different computers.

DateTimeOffset コンストラクターDateTimeOffset constructors

DateTimeOffset 型は、6つのコンストラクターを定義します。The DateTimeOffset type defines six constructors. これらの4つは DateTime コンストラクターに直接対応しており、UTC からの日付と時刻のオフセットを定義する TimeSpan 型の追加パラメーターがあります。Four of them correspond directly to DateTime constructors, with an additional parameter of type TimeSpan that defines the date and time's offset from UTC. これにより、個々の日付と時刻のコンポーネントの値に基づいて、DateTimeOffset 値を定義できます。These allow you to define a DateTimeOffset value based on the value of its individual date and time components. たとえば、次のコードでは、これらの4つのコンストラクターを使用して、7/1/2008 12:05 AM + 01:00 と同じ値を持つ DateTimeOffset オブジェクトをインスタンス化しています。For example, the following code uses these four constructors to instantiate DateTimeOffset objects with identical values of 7/1/2008 12:05 AM +01:00.

DateTimeOffset dateAndTime;

// Instantiate date and time using years, months, days, 
// hours, minutes, and seconds
dateAndTime = new DateTimeOffset(2008, 5, 1, 8, 6, 32, 
                                 new TimeSpan(1, 0, 0));
Console.WriteLine(dateAndTime);
// Instantiate date and time using years, months, days,
// hours, minutes, seconds, and milliseconds
dateAndTime = new DateTimeOffset(2008, 5, 1, 8, 6, 32, 545, 
                                 new TimeSpan(1, 0, 0));
Console.WriteLine("{0} {1}", dateAndTime.ToString("G"), 
                             dateAndTime.ToString("zzz"));

// Instantiate date and time using Persian calendar with years,
// months, days, hours, minutes, seconds, and milliseconds
dateAndTime = new DateTimeOffset(1387, 2, 12, 8, 6, 32, 545, 
                                 new PersianCalendar(), 
                                 new TimeSpan(1, 0, 0));
// Note that the console output displays the date in the Gregorian
// calendar, not the Persian calendar. 
Console.WriteLine("{0} {1}", dateAndTime.ToString("G"), 
                             dateAndTime.ToString("zzz"));

// Instantiate date and time using number of ticks
// 05/01/2008 8:06:32 AM is 633,452,259,920,000,000 ticks
dateAndTime = new DateTimeOffset(633452259920000000, new TimeSpan(1, 0, 0));  
Console.WriteLine(dateAndTime);
// The example displays the following output to the console:
//       5/1/2008 8:06:32 AM +01:00
//       5/1/2008 8:06:32 AM +01:00
//       5/1/2008 8:06:32 AM +01:00
//       5/1/2008 8:06:32 AM +01:00
Dim dateAndTime As DateTimeOffset

' Instantiate date and time using years, months, days, 
' hours, minutes, and seconds
dateAndTime = New DateTimeOffset(2008, 5, 1, 8, 6, 32, _
                                 New TimeSpan(1, 0, 0))
Console.WriteLine(dateAndTime)
' Instantiate date and time using years, months, days,
' hours, minutes, seconds, and milliseconds
dateAndTime = New DateTimeOffset(2008, 5, 1, 8, 6, 32, 545, _
                                 New TimeSpan(1, 0, 0))
Console.WriteLine("{0} {1}", dateAndTime.ToString("G"), _
                             dateAndTime.ToString("zzz"))

' Instantiate date and time using Persian calendar with years,
' months, days, hours, minutes, seconds, and milliseconds
dateAndTime = New DateTimeOffset(1387, 2, 12, 8, 6, 32, 545, New PersianCalendar, New TimeSpan(1, 0, 0))
' Note that the console output displays the date in the Gregorian
' calendar, not the Persian calendar. 
Console.WriteLine("{0} {1}", dateAndTime.ToString("G"), _
                             dateAndTime.ToString("zzz"))

' Instantiate date and time using number of ticks
' 05/01/2008 8:06:32 AM is 633,452,259,920,000,000 ticks
dateAndTime = New DateTimeOffset(633452259920000000, New TimeSpan(1, 0, 0))  
Console.WriteLine(dateAndTime)
' The example displays the following output to the console:
'       5/1/2008 8:06:32 AM +01:00
'       5/1/2008 8:06:32 AM +01:00
'       5/1/2008 8:06:32 AM +01:00
'       5/1/2008 8:06:32 AM +01:00

コンストラクターへの引数の1つとして PersianCalendar オブジェクトを使用してインスタンス化された DateTimeOffset オブジェクトの値がコンソールに表示される場合は、ペルシャ暦ではなく、グレゴリオ暦の日付として表されることに注意してください。Note that, when the value of the DateTimeOffset object instantiated using a PersianCalendar object as one of the arguments to its constructor is displayed to the console, it is expressed as a date in the Gregorian rather than the Persian calendar. ペルシャ暦を使用して日付を出力するには、PersianCalendar のトピックの例を参照してください。To output a date using the Persian calendar, see the example in the PersianCalendar topic.

他の2つのコンストラクターは、DateTime 値から DateTimeOffset オブジェクトを作成します。The other two constructors create a DateTimeOffset object from a DateTime value. 1つ目のパラメーターには、DateTimeOffset 値に変換する1つのパラメーター、DateTime 値があります。The first of these has a single parameter, the DateTime value to convert to a DateTimeOffset value. 結果の DateTimeOffset 値のオフセットは、コンストラクターの単一のパラメーターの Kind プロパティによって異なります。The offset of the resulting DateTimeOffset value depends on the Kind property of the constructor's single parameter. 値が DateTimeKind.Utcの場合、オフセットは TimeSpan.Zeroと同じに設定されます。If its value is DateTimeKind.Utc, the offset is set equal to TimeSpan.Zero. それ以外の場合、オフセットはローカル タイム ゾーンのオフセットと等しい値に設定されます。Otherwise, its offset is set equal to that of the local time zone. 次の例は、このコンストラクターを使用して、UTC とローカルタイムゾーンを表す DateTimeOffset オブジェクトをインスタンス化する方法を示しています。The following example illustrates the use of this constructor to instantiate DateTimeOffset objects representing UTC and the local time zone:

// Declare date; Kind property is DateTimeKind.Unspecified
DateTime sourceDate = new DateTime(2008, 5, 1, 8, 30, 0);
DateTimeOffset targetTime;

// Instantiate a DateTimeOffset value from a UTC time 
DateTime utcTime = DateTime.SpecifyKind(sourceDate, DateTimeKind.Utc);
targetTime = new DateTimeOffset(utcTime);
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM +00:00
// Because the Kind property is DateTimeKind.Utc, 
// the offset is TimeSpan.Zero.

// Instantiate a DateTimeOffset value from a UTC time with a zero offset
targetTime = new DateTimeOffset(utcTime, TimeSpan.Zero);
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM +00:00
// Because the Kind property is DateTimeKind.Utc, 
// the call to the constructor succeeds

// Instantiate a DateTimeOffset value from a UTC time with a negative offset
try
{
   targetTime = new DateTimeOffset(utcTime, new TimeSpan(-2, 0, 0));
   Console.WriteLine(targetTime);
}
catch (ArgumentException)
{
   Console.WriteLine("Attempt to create DateTimeOffset value from {0} failed.", 
                      targetTime);
}   
// Throws exception and displays the following to the console:
//   Attempt to create DateTimeOffset value from 5/1/2008 8:30:00 AM +00:00 failed.

// Instantiate a DateTimeOffset value from a local time
DateTime localTime = DateTime.SpecifyKind(sourceDate, DateTimeKind.Local);
targetTime = new DateTimeOffset(localTime);
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM -07:00
// Because the Kind property is DateTimeKind.Local, 
// the offset is that of the local time zone.

// Instantiate a DateTimeOffset value from an unspecified time
targetTime = new DateTimeOffset(sourceDate);
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM -07:00
// Because the Kind property is DateTimeKind.Unspecified, 
// the offset is that of the local time zone.
' Declare date; Kind property is DateTimeKind.Unspecified
Dim sourceDate As Date = #5/1/2008 8:30 AM#
Dim targetTime As DateTimeOffset

' Instantiate a DateTimeOffset value from a UTC time 
Dim utcTime As Date = Date.SpecifyKind(sourceDate, DateTimeKind.Utc)
targetTime = New DateTimeOffset(utcTime)
Console.WriteLine(targetTime)
' Displays 5/1/2008 8:30:00 AM +00:00
' Because the Kind property is DateTimeKind.Utc, 
' the offset is TimeSpan.Zero.

      
' Instantiate a DateTimeOffset value from a local time
Dim localTime As Date = Date.SpecifyKind(sourceDate, DateTimeKind.Local)
targetTime = New DateTimeOffset(localTime)
Console.WriteLine(targetTime)
' Displays 5/1/2008 8:30:00 AM -07:00
' Because the Kind property is DateTimeKind.Local, 
' the offset is that of the local time zone.

' Instantiate a DateTimeOffset value from an unspecified time
targetTime = New DateTimeOffset(sourceDate)
Console.WriteLine(targetTime)
' Displays 5/1/2008 8:30:00 AM -07:00
' Because the Kind property is DateTimeKind.Unspecified, 
' the offset is that of the local time zone.

'

注意

1つの DateTime パラメーターを持つ DateTimeOffset コンストラクターのオーバーロードを呼び出すことは、DateTime 値から DateTimeOffset 値への暗黙的な変換を実行することと同じです。Calling the overload of the DateTimeOffset constructor that has a single DateTime parameter is equivalent to performing an implicit conversion of a DateTime value to a DateTimeOffset value.

DateTime 値から DateTimeOffset オブジェクトを作成する2つ目のコンストラクターには、変換する DateTime 値と UTC からの日付と時刻のオフセットを表す TimeSpan 値の2つのパラメーターがあります。The second constructor that creates a DateTimeOffset object from a DateTime value has two parameters: the DateTime value to convert, and a TimeSpan value representing the date and time's offset from UTC. このオフセット値は、コンストラクターの最初のパラメーターの Kind プロパティに対応している必要があります。一致しない場合、ArgumentException がスローされます。This offset value must correspond to the Kind property of the constructor's first parameter or an ArgumentException is thrown. 最初のパラメーターの Kind プロパティが DateTimeKind.Utcの場合は、2番目のパラメーターの値を TimeSpan.Zeroする必要があります。If the Kind property of the first parameter is DateTimeKind.Utc, the value of the second parameter must be TimeSpan.Zero. 最初のパラメーターの Kind プロパティが DateTimeKind.Localの場合、2番目のパラメーターの値は、ローカルシステムのタイムゾーンのオフセットである必要があります。If the Kind property of the first parameter is DateTimeKind.Local, the value of the second parameter must be the offset of the local system's time zone. 最初のパラメーターの Kind プロパティが DateTimeKind.Unspecifiedの場合、オフセットには任意の有効な値を指定できます。If the Kind property of the first parameter is DateTimeKind.Unspecified, the offset can be any valid value. 次のコードは、DateTimeDateTimeOffset 値に変換するこのコンストラクターの呼び出しを示しています。The following code illustrates calls to this constructor to convert DateTime to DateTimeOffset values.

DateTime sourceDate = new DateTime(2008, 5, 1, 8, 30, 0);
DateTimeOffset targetTime;

// Instantiate a DateTimeOffset value from a UTC time with a zero offset.
DateTime utcTime = DateTime.SpecifyKind(sourceDate, DateTimeKind.Utc);
targetTime = new DateTimeOffset(utcTime, TimeSpan.Zero);
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM +00:00
// Because the Kind property is DateTimeKind.Utc,  
// the call to the constructor succeeds

// Instantiate a DateTimeOffset value from a UTC time with a non-zero offset.
try
{
   targetTime = new DateTimeOffset(utcTime, new TimeSpan(-2, 0, 0));
   Console.WriteLine(targetTime);
}
catch (ArgumentException)
{
   Console.WriteLine("Attempt to create DateTimeOffset value from {0} failed.", 
                      utcTime);
}   
// Throws exception and displays the following to the console:
//   Attempt to create DateTimeOffset value from 5/1/2008 8:30:00 AM failed.

// Instantiate a DateTimeOffset value from a local time with 
// the offset of the local time zone
DateTime localTime = DateTime.SpecifyKind(sourceDate, DateTimeKind.Local);
targetTime = new DateTimeOffset(localTime, 
                                TimeZoneInfo.Local.GetUtcOffset(localTime));
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM -07:00
// Because the Kind property is DateTimeKind.Local and the offset matches
// that of the local time zone, the call to the constructor succeeds.

// Instantiate a DateTimeOffset value from a local time with a zero offset.
try
{
   targetTime = new DateTimeOffset(localTime, TimeSpan.Zero);
   Console.WriteLine(targetTime);
}
catch (ArgumentException)
{
   Console.WriteLine("Attempt to create DateTimeOffset value from {0} failed.", 
                      localTime);
}   
// Throws exception and displays the following to the console:
//   Attempt to create DateTimeOffset value from 5/1/2008 8:30:00 AM failed.

// Instantiate a DateTimeOffset value with an arbitary time zone. 
string timeZoneName = "Central Standard Time";
TimeSpan offset = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName). 
                         GetUtcOffset(sourceDate); 
targetTime = new DateTimeOffset(sourceDate, offset);
Console.WriteLine(targetTime);
// Displays 5/1/2008 8:30:00 AM -05:00
Dim sourceDate As Date = #5/1/2008 8:30 AM#
Dim targetTime As DateTimeOffset

' Instantiate a DateTimeOffset value from a UTC time with a zero offset.
Dim utcTime As Date = Date.SpecifyKind(sourceDate, DateTimeKind.Utc)
targetTime = New DateTimeOffset(utcTime, TimeSpan.Zero)
Console.WriteLine(targetTime)
' Displays 5/1/2008 8:30:00 AM +00:00
' Because the Kind property is DateTimeKind.Utc,  
' the call to the constructor succeeds.

' Instantiate a DateTimeOffset value from a UTC time with a non-zero offset.
Try
   targetTime = New DateTimeOffset(utcTime, New TimeSpan(-2, 0, 0))
   Console.WriteLine(targetTime)
Catch e As ArgumentException
   Console.WriteLine("Attempt to create DateTimeOffset value from {0} failed.", _
                      utcTime)
End Try   
' Throws exception and displays the following to the console:
'   Attempt to create DateTimeOffset value from 5/1/2008 8:30:00 AM failed.

' Instantiate a DateTimeOffset value from a local time with 
' the offset of the local time zone.
Dim localTime As Date = Date.SpecifyKind(sourceDate, DateTimeKind.Local)
targetTime = New DateTimeOffset(localTime, _
                                TimeZoneInfo.Local.GetUtcOffset(localTime))
Console.WriteLine(targetTime)
' Because the Kind property is DateTimeKind.Local and the offset matches
' that of the local time zone, the call to the constructor succeeds.

' Instantiate a DateTimeOffset value from a local time with a zero offset.
Try
   targetTime = New DateTimeOffset(localTime, TimeSpan.Zero)
   Console.WriteLine(targetTime)
Catch e As ArgumentException
   Console.WriteLine("Attempt to create DateTimeOffset value from {0} failed.", _
                      localTime)
End Try   
' Throws exception and displays the following to the console:
'   Attempt to create DateTimeOffset value from 5/1/2008 8:30:00 AM failed.

' Instantiate a DateTimeOffset value with an arbitary time zone. 
Dim timeZoneName As String = "Central Standard Time"
Dim offset As TimeSpan = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName). _
                         GetUtcOffset(sourceDate) 
targetTime = New DateTimeOffset(sourceDate, offset)
Console.WriteLine(targetTime)
' Displays 5/1/2008 8:30:00 AM -05:00

暗黙の型変換Implicit type conversion

DateTimeOffset 型は、DateTime 値から DateTimeOffset 値への暗黙的な型変換の1つをサポートします。The DateTimeOffset type supports one implicit type conversion: from a DateTime value to a DateTimeOffset value. (暗黙的な型変換とは、明示的なキャスト (C# の場合) または変換 (Visual Basic の場合) を必要とせず、情報を失わない 1 つの型から別の型への変換です)。(An implicit type conversion is a conversion from one type to another that does not require an explicit cast (in C#) or conversion (in Visual Basic) and that does not lose information. これにより、次のようなコードが可能となります。It makes code like the following possible.

   DateTimeOffset targetTime;

   // The Kind property of sourceDate is DateTimeKind.Unspecified
   DateTime sourceDate = new DateTime(2008, 5, 1, 8, 30, 0);
   targetTime = sourceDate;
   Console.WriteLine(targetTime);   
   // Displays 5/1/2008 8:30:00 AM -07:00
   
   // define a UTC time (Kind property is DateTimeKind.Utc)
   DateTime utcTime = DateTime.SpecifyKind(sourceDate, DateTimeKind.Utc);
   targetTime = utcTime;
   Console.WriteLine(targetTime);   
   // Displays 5/1/2008 8:30:00 AM +00:00

   // Define a local time (Kind property is DateTimeKind.Local)
   DateTime localTime = DateTime.SpecifyKind(sourceDate, DateTimeKind.Local);
   targetTime = localTime;
   Console.WriteLine(targetTime);      
   // Displays 5/1/2008 8:30:00 AM -07:00
   Dim targetTime As DateTimeOffset

   ' The Kind property of sourceDate is DateTimeKind.Unspecified
   Dim sourceDate As Date = #5/1/2008 8:30 AM#
   targetTime = sourceDate
   Console.WriteLine(targetTime)   
   ' Displays 5/1/2008 8:30:00 AM -07:00
   
   ' define a UTC time (Kind property is DateTimeKind.Utc)
   Dim utcTime As Date = Date.SpecifyKind(sourceDate, DateTimeKind.Utc)
   targetTime = utcTime
   Console.WriteLine(targetTime)   
   ' Displays 5/1/2008 8:30:00 AM +00:00

   ' Define a local time (Kind property is DateTimeKind.Local)
   Dim localTime As Date = Date.SpecifyKind(sourceDate, DateTimeKind.Local)
   targetTime = localTime
   Console.WriteLine(targetTime)      
   ' Displays 5/1/2008 8:30:00 AM -07:00

結果の DateTimeOffset 値のオフセットは、DateTime.Kind プロパティ値によって異なります。The offset of the resulting DateTimeOffset value depends on the DateTime.Kind property value. 値が DateTimeKind.Utcの場合、オフセットは TimeSpan.Zeroと同じに設定されます。If its value is DateTimeKind.Utc, the offset is set equal to TimeSpan.Zero. 値が DateTimeKind.Local または DateTimeKind.Unspecifiedの場合、オフセットはローカルタイムゾーンのオフセットと同じに設定されます。If its value is either DateTimeKind.Local or DateTimeKind.Unspecified, the offset is set equal to that of the local time zone.

日付と時刻の文字列形式の解析Parsing the string representation of a date and time

DateTimeOffset 型では、日付と時刻の文字列形式を DateTimeOffset の値に変換できる4つのメソッドがサポートされています。The DateTimeOffset type supports four methods that allow you to convert the string representation of a date and time into a DateTimeOffset value:

  • Parse、日付と時刻の文字列形式を DateTimeOffset 値に変換しようとし、変換に失敗した場合は例外をスローします。Parse, which tries to convert the string representation of a date and time to a DateTimeOffset value and throws an exception if the conversion fails.

  • TryParse、日付と時刻の文字列形式を DateTimeOffset 値に変換しようとし、変換に失敗した場合は false を返します。TryParse, which tries to convert the string representation of a date and time to a DateTimeOffset value and returns false if the conversion fails.

  • ParseExact、指定した形式の日付と時刻の文字列形式を DateTimeOffset 値に変換しようとします。ParseExact, which tries to convert the string representation of a date and time in a specified format to a DateTimeOffset value. 変換が失敗すると、メソッドは例外をスローします。The method throws an exception if the conversion fails.

  • TryParseExact、指定した形式の日付と時刻の文字列形式を DateTimeOffset 値に変換しようとします。TryParseExact, which tries to convert the string representation of a date and time in a specified format to a DateTimeOffset value. 変換が失敗すると、メソッドは false を返します。The method returns false if the conversion fails.

次の例は、これらの4つの文字列変換メソッドを呼び出して、DateTimeOffset 値をインスタンス化する方法を示しています。The following example illustrates calls to each of these four string conversion methods to instantiate a DateTimeOffset value.

string timeString; 
DateTimeOffset targetTime;

timeString = "05/01/2008 8:30 AM +01:00";
try
{
   targetTime = DateTimeOffset.Parse(timeString);
   Console.WriteLine(targetTime);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse {0}.", timeString);   
}   

timeString = "05/01/2008 8:30 AM";
if (DateTimeOffset.TryParse(timeString, out targetTime))
   Console.WriteLine(targetTime);
else
   Console.WriteLine("Unable to parse {0}.", timeString);   

timeString = "Thursday, 01 May 2008 08:30";
try
{
   targetTime = DateTimeOffset.ParseExact(timeString, "f", 
                CultureInfo.InvariantCulture);
   Console.WriteLine(targetTime);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse {0}.", timeString);   
}   

timeString = "Thursday, 01 May 2008 08:30 +02:00";
string formatString; 
formatString = CultureInfo.InvariantCulture.DateTimeFormat.LongDatePattern +
                " " +
                CultureInfo.InvariantCulture.DateTimeFormat.ShortTimePattern +
                " zzz"; 
if (DateTimeOffset.TryParseExact(timeString, 
                                formatString, 
                                CultureInfo.InvariantCulture, 
                                DateTimeStyles.AllowLeadingWhite, 
                                out targetTime))
   Console.WriteLine(targetTime);
else
   Console.WriteLine("Unable to parse {0}.", timeString);
// The example displays the following output to the console:
//    5/1/2008 8:30:00 AM +01:00
//    5/1/2008 8:30:00 AM -07:00
//    5/1/2008 8:30:00 AM -07:00
//    5/1/2008 8:30:00 AM +02:00
Dim timeString As String 
Dim targetTime As DateTimeOffset

timeString = "05/01/2008 8:30 AM +01:00"
Try
   targetTime = DateTimeOffset.Parse(timeString)
   Console.WriteLine(targetTime)
Catch e As FormatException
   Console.WriteLine("Unable to parse {0}.", timeString)   
End Try   

timeString = "05/01/2008 8:30 AM"
If DateTimeOffset.TryParse(timeString, targetTime) Then
   Console.WriteLine(targetTime)
Else
   Console.WriteLine("Unable to parse {0}.", timeString)   
End If

timeString = "Thursday, 01 May 2008 08:30"
Try
   targetTime = DateTimeOffset.ParseExact(timeString, "f", _
                CultureInfo.InvariantCulture)
   Console.WriteLine(targetTime)
Catch e As FormatException
   Console.WriteLine("Unable to parse {0}.", timeString)   
End Try   

timeString = "Thursday, 01 May 2008 08:30 +02:00"
Dim formatString As String 
formatString = CultureInfo.InvariantCulture.DateTimeFormat.LongDatePattern & _
                " " & _
                CultureInfo.InvariantCulture.DateTimeFormat.ShortTimePattern & _
                " zzz" 
If DateTimeOffset.TryParseExact(timeString, _
                                formatString, _
                                CultureInfo.InvariantCulture, _
                                DateTimeStyles.AllowLeadingWhite, _
                                targetTime) Then
   Console.WriteLine(targetTime)
Else
   Console.WriteLine("Unable to parse {0}.", timeString)
End If      
' The example displays the following output to the console:
'    5/1/2008 8:30:00 AM +01:00
'    5/1/2008 8:30:00 AM -07:00
'    5/1/2008 8:30:00 AM -07:00
'    5/1/2008 8:30:00 AM +02:00

関連項目See also