Sdílet prostřednictvím


Převádění mezi DateTime a DateTimeOffset

DateTimeOffset I když struktura poskytuje větší stupeň povědomí o časovém pásmu než DateTime struktura, DateTime parametry se používají častěji při volání metody. Kvůli tomuto přístupu je důležitá možnost převádět DateTimeOffset hodnoty na DateTime hodnoty a naopak. Tento článek ukazuje, jak tyto převody provádět způsobem, který zachovává co nejvíce informací o časovém pásmu.

Poznámka:

DateTimeDateTimeOffset Oba typy mají určitá omezení při reprezentaci časů v časových pásmech. Díky své Kind vlastnosti DateTime může odrážet pouze koordinovaný univerzální čas (UTC) a místní časové pásmo systému. DateTimeOffset odráží posun času od času UTC, ale neodráží skutečné časové pásmo, ke kterému tento posun patří. Další informace o časových hodnotách a podpoře časových pásem naleznete v tématu Volba Mezi dateTime, DateTimeOffset, TimeSpan a TimeZoneInfo.

Převody z DateTime na DateTimeOffset

Struktura DateTimeOffset poskytuje dva ekvivalentní způsoby převodu DateTimeDateTimeOffset , které jsou vhodné pro většinu převodů:

U hodnot UTC a místních DateTime hodnot Offset odpovídá vlastnost výsledné DateTimeOffset hodnoty přesnému posunu utc nebo místního časového pásma. Například následující kód převede čas UTC na ekvivalentní DateTimeOffset hodnotu:

DateTime utcTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
utcTime1 = DateTime.SpecifyKind(utcTime1, DateTimeKind.Utc);
DateTimeOffset utcTime2 = utcTime1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}",
                  utcTime1,
                  utcTime1.Kind,
                  utcTime2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Utc to a DateTimeOffset value of 6/19/2008 7:00:00 AM +00:00
Dim utcTime1 As Date = Date.SpecifyKind(#06/19/2008 7:00AM#, _
                                        DateTimeKind.Utc)
Dim utcTime2 As DateTimeOffset = utcTime1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  utcTime1, _
                  utcTime1.Kind.ToString(), _
                  utcTime2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Utc to a DateTimeOffset value of 6/19/2008 7:00:00 AM +00:00                        

V tomto případě je posun utcTime2 proměnné 00:00. Podobně následující kód převede místní čas na jeho ekvivalentní DateTimeOffset hodnotu:

DateTime localTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
localTime1 = DateTime.SpecifyKind(localTime1, DateTimeKind.Local);
DateTimeOffset localTime2 = localTime1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}",
                  localTime1,
                  localTime1.Kind,
                  localTime2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Local to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00
Dim localTime1 As Date = Date.SpecifyKind(#06/19/2008 7:00AM#, DateTimeKind.Local)
Dim localTime2 As DateTimeOffset = localTime1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  localTime1, _
                  localTime1.Kind.ToString(), _
                  localTime2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Local to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00

Nicméně, pro DateTime hodnoty, jejichž Kind vlastnost je DateTimeKind.Unspecified, tyto dvě metody převodu DateTimeOffset vytvoří hodnotu, jejíž posun je z místního časového pásma. Převod se zobrazí v následujícím příkladu, který běží v americkém standardním časovém pásmu:

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);  // Kind is DateTimeKind.Unspecified
DateTimeOffset time2 = time1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}",
                  time1,
                  time1.Kind,
                  time2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00
Dim time1 As Date = #06/19/2008 7:00AM#      ' Kind is DateTimeKind.Unspecified
Dim time2 As DateTimeOffset = time1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  time1, _
                  time1.Kind.ToString(), _
                  time2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00

DateTime Pokud hodnota odráží datum a čas v jiném časovém pásmu než místní časové pásmo nebo UTC, můžete ji převést na DateTimeOffset hodnotu a zachovat informace o časovém pásmu voláním přetížené DateTimeOffset konstruktoru. Například následující příklad vytvoří instanci objektu, který odpovídá centrálnímu standardnímu DateTimeOffset času:

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);     // Kind is DateTimeKind.Unspecified
try
{
   DateTimeOffset time2 = new DateTimeOffset(time1,
                  TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(time1));
   Console.WriteLine("Converted {0} {1} to a DateTime value of {2}",
                     time1,
                     time1.Kind,
                     time2);
}
// Handle exception if time zone is not defined in registry
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to identify target time zone for conversion.");
}
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTime value of 6/19/2008 7:00:00 AM -05:00
Dim time1 As Date = #06/19/2008 7:00AM#      ' Kind is DateTimeKind.Unspecified
Try
    Dim time2 As New DateTimeOffset(time1, _
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(time1))
    Console.WriteLine("Converted {0} {1} to a DateTime value of {2}", _
                      time1, _
                      time1.Kind.ToString(), _
                      time2)
    ' Handle exception if time zone is not defined in registry
Catch e As TimeZoneNotFoundException
    Console.WriteLine("Unable to identify target time zone for conversion.")
End Try
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTime value of 6/19/2008 7:00:00 AM -05:00

Druhý parametr tohoto přetížení konstruktoru TimeSpan je objekt, který představuje posun času od UTC. Načtěte ji voláním TimeZoneInfo.GetUtcOffset(DateTime) metody odpovídajícího časového pásma času. Jediný parametr metody je DateTime hodnota, která představuje datum a čas, které se mají převést. Pokud časové pásmo podporuje letní čas, tento parametr umožňuje metodě určit odpovídající posun pro dané datum a čas.

Převody z DateTimeOffset na DateTime

Vlastnost DateTime se nejčastěji používá k převodu DateTimeOffsetDateTime . Vrátí DateTime však hodnotu, jejíž Kind vlastnost je Unspecified, jak ukazuje následující příklad:

DateTime baseTime = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset sourceTime;
DateTime targetTime;

// Convert UTC to DateTime value
sourceTime = new DateTimeOffset(baseTime, TimeSpan.Zero);
targetTime = sourceTime.DateTime;
Console.WriteLine("{0} converts to {1} {2}",
                  sourceTime,
                  targetTime,
                  targetTime.Kind);

// Convert local time to DateTime value
sourceTime = new DateTimeOffset(baseTime,
                                TimeZoneInfo.Local.GetUtcOffset(baseTime));
targetTime = sourceTime.DateTime;
Console.WriteLine("{0} converts to {1} {2}",
                  sourceTime,
                  targetTime,
                  targetTime.Kind);

// Convert Central Standard Time to a DateTime value
try
{
   TimeSpan offset = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(baseTime);
   sourceTime = new DateTimeOffset(baseTime, offset);
   targetTime = sourceTime.DateTime;
   Console.WriteLine("{0} converts to {1} {2}",
                     sourceTime,
                     targetTime,
                     targetTime.Kind);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to create DateTimeOffset based on U.S. Central Standard Time.");
}
// This example displays the following output to the console:
//    6/19/2008 7:00:00 AM +00:00 converts to 6/19/2008 7:00:00 AM Unspecified
//    6/19/2008 7:00:00 AM -07:00 converts to 6/19/2008 7:00:00 AM Unspecified
//    6/19/2008 7:00:00 AM -05:00 converts to 6/19/2008 7:00:00 AM Unspecified
Const baseTime As Date = #06/19/2008 7:00AM#
Dim sourceTime As DateTimeOffset
Dim targetTime As Date

' Convert UTC to DateTime value
sourceTime = New DateTimeOffset(baseTime, TimeSpan.Zero)
targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())

' Convert local time to DateTime value
sourceTime = New DateTimeOffset(baseTime, _
                                TimeZoneInfo.Local.GetUtcOffset(baseTime))
targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())

' Convert Central Standard Time to a DateTime value
Try
    Dim offset As TimeSpan = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(baseTime)
    sourceTime = New DateTimeOffset(baseTime, offset)
    targetTime = sourceTime.DateTime
    Console.WriteLine("{0} converts to {1} {2}", _
                      sourceTime, _
                      targetTime, _
                      targetTime.Kind.ToString())
Catch e As TimeZoneNotFoundException
    Console.WriteLine("Unable to create DateTimeOffset based on U.S. Central Standard Time.")
End Try
' This example displays the following output to the console:
'    6/19/2008 7:00:00 AM +00:00 converts to 6/19/2008 7:00:00 AM Unspecified
'    6/19/2008 7:00:00 AM -07:00 converts to 6/19/2008 7:00:00 AM Unspecified
'    6/19/2008 7:00:00 AM -05:00 converts to 6/19/2008 7:00:00 AM Unspecified                       

Předchozí příklad ukazuje, že všechny informace o DateTimeOffset vztahu hodnoty k UTC jsou ztraceny převodem při DateTime použití vlastnosti. Toto chování má vliv také na DateTimeOffset hodnoty, které odpovídají času UTC nebo místnímu času systému, protože DateTime struktura odráží pouze tyto dvě časová pásma ve své Kind vlastnosti.

Pokud chcete při převodu DateTimeOffset na hodnotu zachovat co nejvíce informací o časovém pásmu DateTime , můžete použít vlastnosti DateTimeOffset.UtcDateTime a DateTimeOffset.LocalDateTime vlastnosti.

Převod času UTC

Chcete-li označit, že převedená DateTime hodnota je čas UTC, můžete načíst hodnotu DateTimeOffset.UtcDateTime vlastnosti. Liší se od DateTime vlastnosti dvěma způsoby:

Poznámka:

Pokud vaše aplikace vyžaduje, aby převedené DateTime hodnoty jednoznačně identifikovaly jeden bod v čase, měli byste zvážit použití DateTimeOffset.UtcDateTime vlastnosti ke zpracování všech DateTimeOffsetDateTime převodů.

Následující kód pomocí UtcDateTime vlastnosti převede DateTimeOffset hodnotu, jejíž posun se TimeSpan.Zero rovná hodnotě DateTime :

DateTimeOffset utcTime1 = new DateTimeOffset(2008, 6, 19, 7, 0, 0, TimeSpan.Zero);
DateTime utcTime2 = utcTime1.UtcDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  utcTime1,
                  utcTime2,
                  utcTime2.Kind);
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
Dim utcTime1 As New DateTimeOffset(#06/19/2008 7:00AM#, TimeSpan.Zero)
Dim utcTime2 As Date = utcTime1.UtcDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime1, _
                  utcTime2, _
                  utcTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc                              

Následující kód používá UtcDateTime vlastnost k provedení převodu časového pásma i převodu typu na DateTimeOffset hodnotu:

DateTimeOffset originalTime = new DateTimeOffset(2008, 6, 19, 7, 0, 0, new TimeSpan(5, 0, 0));
DateTime utcTime = originalTime.UtcDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  originalTime,
                  utcTime,
                  utcTime.Kind);
// The example displays the following output to the console:
//       6/19/2008 7:00:00 AM +05:00 converted to 6/19/2008 2:00:00 AM Utc
Dim originalTime As New DateTimeOffset(#6/19/2008 7:00AM#, _
                                       New TimeSpan(5, 0, 0))
Dim utcTime As Date = originalTime.UtcDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalTime, _
                  utcTime, _
                  utcTime.Kind.ToString())
' The example displays the following output to the console:
'       6/19/2008 7:00:00 AM +05:00 converted to 6/19/2008 2:00:00 AM Utc

Převod místního času

Chcete-li označit, že DateTimeOffset hodnota představuje místní čas, můžete předat DateTime hodnotu vrácenou DateTimeOffset.DateTime vlastností static do metody (Shared v jazyce Visual Basic). SpecifyKind Metoda vrátí datum a čas předaný jako první parametr, ale nastaví Kind vlastnost na hodnotu určenou jeho druhým parametrem. Následující kód používá metodu SpecifyKind při převodu DateTimeOffset hodnoty, jejíž posun odpovídá hodnotě místního časového pásma:

DateTime sourceDate = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset utcTime1 = new DateTimeOffset(sourceDate,
                          TimeZoneInfo.Local.GetUtcOffset(sourceDate));
DateTime utcTime2 = utcTime1.DateTime;
if (utcTime1.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(utcTime1.DateTime)))
   utcTime2 = DateTime.SpecifyKind(utcTime2, DateTimeKind.Local);

Console.WriteLine("{0} converted to {1} {2}",
                  utcTime1,
                  utcTime2,
                  utcTime2.Kind);
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
Dim sourceDate As Date = #06/19/2008 7:00AM#
Dim utcTime1 As New DateTimeOffset(sourceDate, _
                                   TimeZoneInfo.Local.GetUtcOffset(sourceDate))
Dim utcTime2 As Date = utcTime1.DateTime
If utcTime1.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(utcTime1.DateTime)) Then
    utcTime2 = DateTime.SpecifyKind(utcTime2, DateTimeKind.Local)
End If
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime1, _
                  utcTime2, _
                  utcTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      

Vlastnost můžete také použít k převodu DateTimeOffset.LocalDateTimeDateTimeOffset hodnoty na místní DateTime hodnotu. Vlastnost Kind vrácené DateTime hodnoty je Local. Následující kód používá DateTimeOffset.LocalDateTime vlastnost při převodu DateTimeOffset hodnoty, jejíž posun odpovídá hodnotě místního časového pásma:

DateTime sourceDate = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset localTime1 = new DateTimeOffset(sourceDate,
                          TimeZoneInfo.Local.GetUtcOffset(sourceDate));
DateTime localTime2 = localTime1.LocalDateTime;

Console.WriteLine("{0} converted to {1} {2}",
                  localTime1,
                  localTime2,
                  localTime2.Kind);
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
Dim sourceDate As Date = #06/19/2008 7:00AM#
Dim localTime1 As New DateTimeOffset(sourceDate, _
                                   TimeZoneInfo.Local.GetUtcOffset(sourceDate))
Dim localTime2 As Date = localTime1.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  localTime1, _
                  localTime2, _
                  localTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      

Když načtete DateTime hodnotu pomocí DateTimeOffset.LocalDateTime vlastnosti, přístupová objekt vlastnosti get nejprve převede DateTimeOffset hodnotu na UTC a pak ji převede na místní čas voláním ToLocalTime metody. Toto chování znamená, že můžete načíst hodnotu z DateTimeOffset.LocalDateTime vlastnosti a provést převod časového pásma ve stejnou dobu, kdy provádíte převod typu. Také to znamená, že pravidla úprav místního časového pásma se použijí při provádění převodu. Následující kód znázorňuje použití DateTimeOffset.LocalDateTime vlastnosti k provedení typu i převodu časového pásma. Ukázkový výstup je pro počítač nastavený na tichomořské časové pásmo (USA a Kanada). Listopad je Tichomoří (standardní čas), což je UTC-8, zatímco datum června je letní čas, což je UTC-7.

DateTimeOffset originalDate;
DateTime localDate;

// Convert time originating in a different time zone
originalDate = new DateTimeOffset(2008, 6, 18, 7, 0, 0,
                                  new TimeSpan(-5, 0, 0));
localDate = originalDate.LocalDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  originalDate,
                  localDate,
                  localDate.Kind);
// Convert time originating in a different time zone
// so local time zone's adjustment rules are applied
originalDate = new DateTimeOffset(2007, 11, 4, 4, 0, 0,
                                  new TimeSpan(-5, 0, 0));
localDate = originalDate.LocalDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  originalDate,
                  localDate,
                  localDate.Kind);
// The example displays the following output to the console,
// when you run it on a machine that is set to Pacific Time (US & Canada):
//       6/18/2008 7:00:00 AM -05:00 converted to 6/18/2008 5:00:00 AM Local
//       11/4/2007 4:00:00 AM -05:00 converted to 11/4/2007 1:00:00 AM Local
Dim originalDate As DateTimeOffset
Dim localDate As Date

' Convert time originating in a different time zone
originalDate = New DateTimeOffset(#06/19/2008 7:00AM#, _
                                  New TimeSpan(-5, 0, 0))
localDate = originalDate.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalDate, _
                  localDate, _
                  localDate.Kind.ToString())
' Convert time originating in a different time zone 
' so local time zone's adjustment rules are applied
originalDate = New DateTimeOffset(#11/04/2007 4:00AM#, _
                                  New TimeSpan(-5, 0, 0))
localDate = originalDate.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalDate, _
                  localDate, _
                  localDate.Kind.ToString())
' The example displays the following output to the console,
' when you run it on a machine that is set to Pacific Time (US & Canada):
'       6/18/2008 7:00:00 AM -05:00 converted to 6/18/2008 5:00:00 AM Local
'       11/4/2007 4:00:00 AM -05:00 converted to 11/4/2007 1:00:00 AM Local

Metoda převodu pro obecné účely

Následující příklad definuje metodu s názvem ConvertFromDateTimeOffset , která převádí DateTimeOffset hodnoty na DateTime hodnoty. Na základě posunu určuje, zda DateTimeOffset je hodnota čas UTC, místní čas nebo jiný čas, a odpovídajícím způsobem definuje vrácenou hodnotu data a času Kind .

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime)
{
   if (dateTime.Offset.Equals(TimeSpan.Zero))
      return dateTime.UtcDateTime;
   else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime)))
      return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local);
   else
      return dateTime.DateTime;
}
Function ConvertFromDateTimeOffset(dateTime As DateTimeOffset) As Date
    If dateTime.Offset.Equals(TimeSpan.Zero) Then
        Return dateTime.UtcDateTime
    ElseIf dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))
        Return Date.SpecifyKind(dateTime.DateTime, DateTimeKind.Local)
    Else
        Return dateTime.DateTime
    End If
End Function

Následující příklad volá metodu ConvertFromDateTimeOffset pro převod DateTimeOffset hodnot, které představují čas UTC, místní čas a čas v americkém standardním časovém pásmu.

DateTime timeComponent = new DateTime(2008, 6, 19, 7, 0, 0);
DateTime returnedDate;

// Convert UTC time
DateTimeOffset utcTime = new DateTimeOffset(timeComponent, TimeSpan.Zero);
returnedDate = ConvertFromDateTimeOffset(utcTime);
Console.WriteLine("{0} converted to {1} {2}",
                  utcTime,
                  returnedDate,
                  returnedDate.Kind);

// Convert local time
DateTimeOffset localTime = new DateTimeOffset(timeComponent,
                           TimeZoneInfo.Local.GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(localTime);
Console.WriteLine("{0} converted to {1} {2}",
                  localTime,
                  returnedDate,
                  returnedDate.Kind);

// Convert Central Standard Time
DateTimeOffset cstTime = new DateTimeOffset(timeComponent,
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(cstTime);
Console.WriteLine("{0} converted to {1} {2}",
                  cstTime,
                  returnedDate,
                  returnedDate.Kind);
// The example displays the following output to the console:
//    6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
//    6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
//    6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 7:00:00 AM Unspecified
Dim timeComponent As Date = #06/19/2008 7:00AM#
Dim returnedDate As Date

' Convert UTC time
Dim utcTime As New DateTimeOffset(timeComponent, TimeSpan.Zero)
returnedDate = ConvertFromDateTimeOffset(utcTime)
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())

' Convert local time
Dim localTime As New DateTimeOffset(timeComponent, _
                                    TimeZoneInfo.Local.GetUtcOffset(timeComponent))
returnedDate = ConvertFromDateTimeOffset(localTime)
Console.WriteLine("{0} converted to {1} {2}", _
                  localTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())

' Convert Central Standard Time
Dim cstTime As New DateTimeOffset(timeComponent, _
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent))
returnedDate = ConvertFromDateTimeOffset(cstTime)
Console.WriteLine("{0} converted to {1} {2}", _
                  cstTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())
' The example displays the following output to the console:
'    6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
'    6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
'    6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 7:00:00 AM Unspecified

Poznámka:

Kód provede následující dva předpoklady v závislosti na aplikaci a zdroji hodnot data a času, nemusí být vždy platné:

  • Předpokládá se, že hodnota data a času, jejíž posun je TimeSpan.Zero reprezentován standardem UTC. UTC ve skutečnosti není čas v určitém časovém pásmu, ale čas, ve kterém jsou časy ve světovém časovém pásmu standardizované. Časová pásma mohou mít také posun .Zero

  • Předpokládá se, že datum a čas, jehož posun se rovná hodnotě místního časového pásma, představuje místní časové pásmo. Vzhledem k tomu, že hodnoty data a času se oddělují od původního časového pásma, nemusí se jednat o tento případ; datum a čas mohou pocházet z jiného časového pásma se stejným posunem.

Viz také