Konvertálás DateTime és DateTimeOffset között

Bár a DateTimeOffset struktúra nagyobb időzóna-tudatosságot biztosít, mint a DateTime struktúra, DateTime a paramétereket gyakrabban használják metódushívásokban. Ennek a megközelítésnek köszönhetően fontos az, hogy képesek legyünk a DateTimeOffset értékeket DateTime értékekké alakítani, és fordítva. Ez a cikk bemutatja, hogyan hajthatja végre ezeket a konverziókat oly módon, hogy a lehető legtöbb időzóna-információt megőrizze.

Megjegyzés

Mind a DateTime típusok, mind a DateTimeOffset típusok bizonyos korlátozásokkal rendelkeznek, amikor időzónákban jelölik az időzónákat. A tulajdonságával KindDateTime csak az egyezményes világidőt (UTC) és a rendszer helyi időzónáját képes tükrözni. DateTimeOffset az idő UTC-től való eltolódását mutatja, de nem ad információt arról az időzónáról, amelyhez ez az eltolódás tartozik. Az időértékekről és az időzónák támogatásáról további információt a DateTime, a DateTimeOffset, a TimeSpan és a TimeZoneInfo közötti választás című témakörben talál.

Konvertálás DateTime-ról DateTimeOffset-ra

A DateTimeOffset struktúra két egyenértékű módszert biztosít a DateTimeDateTimeOffset legtöbb átalakításhoz megfelelő átalakítás végrehajtására:

UTC és helyi DateTime értékek esetén az Offset eredményül kapott DateTimeOffset érték tulajdonsága pontosan tükrözi az UTC vagy a helyi időzóna eltolását. Az alábbi kód például az UTC-időt az azzal egyenértékű DateTimeOffset értékké alakítja:

DateTime utcTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
utcTime1 = DateTime.SpecifyKind(utcTime1, DateTimeKind.Utc);
DateTimeOffset utcTime2 = utcTime1;
Console.WriteLine($"Converted {utcTime1} {utcTime1.Kind} to a DateTimeOffset value of {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                        

Ebben az esetben a utcTime2 változónak az eltolása 00:00. Hasonlóképpen, a következő kód a helyi időt az azzal egyenértékű DateTimeOffset értékké alakítja. Az átalakítás az Egyesült Államok csendes-óceáni standard időzónájában fut:

DateTime localTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
localTime1 = DateTime.SpecifyKind(localTime1, DateTimeKind.Local);
DateTimeOffset localTime2 = localTime1;
Console.WriteLine($"Converted {localTime1} {localTime1.Kind} to a DateTimeOffset value of {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

Azon értékek esetében DateTime, amelyeknek Kind tulajdonsága DateTimeKind.Unspecified, ez a két átalakítási módszer olyan DateTimeOffset értéket hoz létre, amely eltolódása megegyezik a helyi időzónáéval. Az átalakítás az alábbi példában látható, amely az Egyesült Államok csendes-óceáni standard időzónájában fut:

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);  // Kind is DateTimeKind.Unspecified
DateTimeOffset time2 = time1;
Console.WriteLine($"Converted {time1} {time1.Kind} to a DateTimeOffset value of {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

Ha az érték a DateTime helyi időzónától vagy UTC-től eltérő helyen jeleníti meg a dátumot és az időt, a túlterhelt DateTimeOffset konstruktor meghívásával átalakíthatja értékkéDateTimeOffset, és megőrizheti az időzóna adatait. Az alábbi példa például létrehoz egy DateTimeOffset , a központi téli időt tükröző objektumot:

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 {time1} {time1.Kind} to a DateTime value of {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

A konstruktor túlterhelésének második paramétere egy TimeSpan objektum, amely az idő UTC-től való eltolódását jelöli. Kérje le az TimeZoneInfo.GetUtcOffset(DateTime) idő megfelelő időzónájának metódusának meghívásával. A metódus egyetlen paramétere az az DateTime érték, amely az átalakítandó dátumot és időt jelöli. Ha az időzóna támogatja a nyári időszámítást, ez a paraméter lehetővé teszi a metódus számára az adott dátum és idő megfelelő eltolásának meghatározását.

Konvertálás DateTimeOffsetről DateTime-ra

A DateTime tulajdonságot leggyakrabban átalakításra DateTimeOffsetDateTime használják. Visszaad azonban egy DateTime értéket, amelynek Kind a tulajdonsága az Unspecified, ahogy az alábbi példa szemlélteti:

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($"{sourceTime} converts to {targetTime} {targetTime.Kind}");

// Convert local time to DateTime value
sourceTime = new DateTimeOffset(baseTime,
                                TimeZoneInfo.Local.GetUtcOffset(baseTime));
targetTime = sourceTime.DateTime;
Console.WriteLine($"{sourceTime} converts to {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($"{sourceTime} converts to {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                       

Az előző példa azt mutatja, hogy az DateTimeOffset érték UTC-hez való viszonyára vonatkozó információk elvesznek a tulajdonság használata során DateTime történő átalakítás során. Ez a viselkedés az UTC-időnek vagy a rendszer helyi idejének megfelelő értékeket is befolyásolja DateTimeOffset , mivel a DateTime struktúra csak a tulajdonságában lévő két időzónát Kind tükrözi.

Ha a lehető legtöbb időzóna-információt szeretné megőrizni értékké történő alakításkor, használhatja a és tulajdonságokat.

UTC idő konvertálása

Ha azt szeretné jelezni, hogy a konvertált DateTime érték az UTC idő, lekérheti a DateTimeOffset.UtcDateTime tulajdonság értékét. A tulajdonságtól DateTime kétféleképpen tér el:

Megjegyzés

Ha az alkalmazás megköveteli, hogy a konvertált DateTime értékek egyértelműen azonosítsanak egy adott időpontot, fontolja meg a tulajdonság használatát az DateTimeOffset.UtcDateTime összes DateTimeOffsetDateTime konvertálás kezelésére.

Az alábbi kód a UtcDateTime tulajdonság használatával konvertál egy DateTimeOffset értéket, amelynek eltolása egyenlő TimeSpan.Zero-vel egy DateTime értékké.

DateTimeOffset utcTime1 = new DateTimeOffset(2008, 6, 19, 7, 0, 0, TimeSpan.Zero);
DateTime utcTime2 = utcTime1.UtcDateTime;
Console.WriteLine($"{utcTime1} converted to {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                              

Az alábbi kód a tulajdonságot használja az UtcDateTime időzóna-átalakítás és a típuskonverzió végrehajtásához egy DateTimeOffset értéken:

DateTimeOffset originalTime = new DateTimeOffset(2008, 6, 19, 7, 0, 0, new TimeSpan(5, 0, 0));
DateTime utcTime = originalTime.UtcDateTime;
Console.WriteLine($"{originalTime} converted to {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

Helyi idő konvertálása

Ha azt szeretné jelezni, hogy egy DateTimeOffset érték a helyi időt jelöli, a DateTime tulajdonság által visszaadott DateTimeOffset.DateTime értéket átadhatja a static (Shared Visual Basic) SpecifyKind metódusnak. A metódus az első paraméterként megadott dátumot és időt adja vissza, de a tulajdonságot a Kind második paraméter által megadott értékre állítja. A következő kód a metódust használja egy SpecifyKindDateTimeOffset olyan érték konvertálásához, amelynek eltolása megfelel a helyi időzónáénak:

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($"{utcTime1} converted to {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      

A tulajdonság használatával DateTimeOffset.LocalDateTime is átalakíthat egy DateTimeOffset értéket helyi DateTime értékké. A Kind visszaadott DateTime érték tulajdonsága.Local Az alábbi kód a DateTimeOffset.LocalDateTime tulajdonságot használja egy DateTimeOffset olyan érték konvertálásakor, amelynek eltolása megfelel a helyi időzónáénak:

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($"{localTime1} converted to {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      

Amikor egy értéket a DateTime tulajdonság használatával kér leDateTimeOffset.LocalDateTime, a tulajdonság tartozéka get először UTC értékké alakítja át az DateTimeOffset értéket, majd a metódus meghívásával ToLocalTime helyi idő szerint konvertálja azt. Ez a viselkedés azt jelenti, hogy lekérhet egy értéket a DateTimeOffset.LocalDateTime tulajdonságból egy időzóna-átalakítás végrehajtásához a típuskonverzióval egyidejűleg. Ez azt is jelenti, hogy a helyi időzóna kiigazítási szabályai érvényesülnek az átalakítás végrehajtásakor. Az alábbi kód bemutatja, hogy a DateTimeOffset.LocalDateTime tulajdonság milyen típusú és időzóna-átalakítást hajt végre. A mintakimenet egy csendes-óceáni időzónára (USA és Kanada) beállított géphez készült. A novemberi dátum csendes-óceáni téli idő, amely UTC-8, míg a júniusi dátum a nyári időszámítás, ami 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($"{originalDate} converted to {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($"{originalDate} converted to {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

Általános célú konverziós módszer

Az alábbi példa egy olyan metódust ConvertFromDateTimeOffset határoz meg, amely a DateTimeOffset értékeket DateTime értékekké alakítja. Az eltolás alapján meghatározza, hogy az DateTimeOffset érték UTC-idő, helyi idő vagy más időpont-e, és ennek megfelelően határozza meg a visszaadott dátum- és időérték tulajdonságát 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

Az alábbi példa a metódust ConvertFromDateTimeOffset hívja meg annak érdekében, hogy konvertálja azokat az értékeket, amelyek egy UTC-időt, egy helyi időt és az Egyesült Államok központi standard időzónájának idejét ábrázolják.

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($"{utcTime} converted to {returnedDate} {returnedDate.Kind}");

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

// Convert Central Standard Time
DateTimeOffset cstTime = new DateTimeOffset(timeComponent,
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(cstTime);
Console.WriteLine($"{cstTime} converted to {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

Megjegyzés

A kód az alkalmazástól és a dátum- és időértékek forrásától függően az alábbi két feltételezést teszi lehetővé, amelyek nem mindig érvényesek:

  • Feltételezi, hogy egy dátum- és időérték eltolása TimeSpan.Zero a UTC-t jelenti. Valójában az UTC nem egy adott időzónában lévő idő, hanem az az idő, amelyhez viszonyítva a világ időzónáinak időzónái szabványosítva vannak. Az időzónák eltolása Zerois lehet.

  • Feltételezi, hogy az a dátum és idő, amelynek eltolása megegyezik a helyi időzónáéval, a helyi időzónát jelöli. Mivel a dátum- és időértékek eltérnek az eredeti időzónától, előfordulhat, hogy ez nem így van; a dátum és az idő egy másik, azonos eltolású időzónából származhatott.

Lásd még