Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Sebbene la DateTimeOffset struttura fornisca un grado di consapevolezza del fuso orario maggiore rispetto alla DateTime struttura, DateTime i parametri vengono usati più comunemente nelle chiamate ai metodi. A causa di questo approccio, la possibilità di convertire DateTimeOffset i valori in DateTime valori e viceversa è importante. Questo articolo illustra come eseguire queste conversioni in modo da mantenere il maggior numero possibile di informazioni sul fuso orario.
Annotazioni
Sia i DateTime tipi che i DateTimeOffset tipi presentano alcune limitazioni quando rappresentano gli orari nei fusi orari. Con la relativa Kind proprietà, DateTime è in grado di riflettere solo l'ora UTC (Coordinated Universal Time) e il fuso orario locale del sistema. DateTimeOffset riflette l'offset di un'ora rispetto all'ora UTC, ma non riflette il fuso orario effettivo a cui appartiene tale offset. Per altre informazioni sui valori di ora e sul supporto per i fusi orari, vedere Scelta tra DateTime, DateTimeOffset, TimeSpan e TimeZoneInfo.
Conversioni da DateTime a DateTimeOffset
La DateTimeOffset struttura offre due modi equivalenti per eseguire DateTime la DateTimeOffset conversione che sono adatti per la maggior parte delle conversioni:
Il costruttore DateTimeOffset, che crea un nuovo DateTimeOffset oggetto basato su un valore DateTime.
Operatore di conversione implicito, che consente di assegnare un DateTime valore a un DateTimeOffset oggetto .
Per i valori DateTime UTC e locali, la proprietà Offset del valore risultante DateTimeOffset riflette accuratamente l'offset del fuso orario UTC o locale. Ad esempio, il codice seguente converte un'ora UTC nel valore equivalente DateTimeOffset :
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
In questo caso, l'offset della utcTime2 variabile è 00:00. Analogamente, il codice seguente converte un'ora locale nel valore equivalente DateTimeOffset . La conversione viene eseguita nel fuso orario standard degli Stati Uniti:
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
Tuttavia, per DateTime i valori la cui Kind proprietà è DateTimeKind.Unspecified, questi due metodi di conversione producono un DateTimeOffset valore il cui offset è quello del fuso orario locale. La conversione è illustrata nell'esempio seguente, che viene eseguita nel fuso orario standard degli Stati Uniti Pacifico:
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
Se il valore DateTime riflette la data e l'ora in qualcosa di diverso dal fuso orario locale o UTC, è possibile convertirlo in un valore DateTimeOffset e conservarne le informazioni sul fuso orario chiamando il costruttore sovraccaricato di DateTimeOffset. L'esempio seguente crea un'istanza di un oggetto DateTimeOffset che riflette l'ora solare centrale.
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
Il secondo parametro di questo overload del costruttore è un oggetto TimeSpan che rappresenta l'offset dell'ora rispetto all'ora UTC. Recuperarlo chiamando il metodo TimeZoneInfo.GetUtcOffset(DateTime) della zona oraria corrispondente dell'ora. Il singolo parametro del metodo è il DateTime valore che rappresenta la data e l'ora da convertire. Se il fuso orario supporta l'ora legale, questo parametro consente al metodo di determinare l'offset appropriato per la data e l'ora specifiche.
Conversioni da DateTimeOffset a DateTime
La DateTime proprietà viene usata più comunemente per eseguire DateTimeOffset la DateTime conversione. Restituisce tuttavia un DateTime valore la cui Kind proprietà è Unspecified, come illustrato nell'esempio seguente:
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
L'esempio precedente mostra che tutte le informazioni sulla relazione tra il DateTimeOffset valore e l'ora UTC vengono perse dalla conversione quando viene utilizzata la DateTime proprietà . Questo comportamento influisce anche sui DateTimeOffset valori che corrispondono all'ora UTC o all'ora locale del sistema perché la DateTime struttura riflette solo i due fusi orari nella relativa Kind proprietà.
Per mantenere il maggior numero possibile di informazioni sul fuso orario quando si converte un oggetto DateTimeOffset in un DateTime valore, è possibile utilizzare le DateTimeOffset.UtcDateTime proprietà e DateTimeOffset.LocalDateTime .
Conversione di un'ora UTC
Per indicare che un valore convertito DateTime è l'ora UTC, è possibile recuperare il valore della DateTimeOffset.UtcDateTime proprietà . Differisce dalla DateTime proprietà in due modi:
Se il valore della proprietà Offset non è uguale a TimeSpan.Zero, converte l'ora in UTC.
Annotazioni
Se l'applicazione richiede che i valori convertiti DateTime identifichino in modo univoco un singolo punto nel tempo, è consigliabile usare la DateTimeOffset.UtcDateTime proprietà per gestire tutte le DateTimeOffsetDateTime conversioni.
Nel codice seguente viene utilizzata la UtcDateTime proprietà per convertire un DateTimeOffset valore il cui offset è uguale TimeSpan.Zero a un DateTime valore:
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
Il codice seguente usa la UtcDateTime proprietà per eseguire sia una conversione del fuso orario che una conversione del tipo su un DateTimeOffset valore:
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
Conversione di un'ora locale
Per indicare che un valore DateTimeOffset rappresenta l'ora locale, è possibile passare il valore DateTime restituito dalla proprietà DateTimeOffset.DateTime al metodo static (Shared in Visual Basic) SpecifyKind. Il metodo restituisce la data e l'ora passate come primo parametro, ma imposta la Kind proprietà sul valore specificato dal secondo parametro. Il codice seguente usa il metodo SpecifyKind per la conversione di un DateTimeOffset valore il cui offset corrisponde a quello del fuso orario locale:
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
È anche possibile utilizzare la DateTimeOffset.LocalDateTime proprietà per convertire un DateTimeOffset valore in un valore locale DateTime . La Kind proprietà del valore restituito DateTime è Local. Nel codice seguente viene utilizzata la DateTimeOffset.LocalDateTime proprietà quando si converte un DateTimeOffset valore il cui offset corrisponde a quello del fuso orario locale:
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
Quando si recupera un DateTime valore usando la DateTimeOffset.LocalDateTime proprietà , la funzione di accesso della get proprietà converte prima il DateTimeOffset valore in utc, quindi lo converte nell'ora locale chiamando il ToLocalTime metodo . Questo comportamento significa che è possibile recuperare un valore dalla DateTimeOffset.LocalDateTime proprietà per eseguire una conversione del fuso orario nello stesso momento in cui si esegue una conversione del tipo. Significa anche che le regole di regolazione del fuso orario locale vengono applicate durante l'esecuzione della conversione. Il codice seguente illustra l'uso della DateTimeOffset.LocalDateTime proprietà per eseguire sia un tipo che una conversione del fuso orario. L'output di esempio è relativo a un computer impostato sul fuso orario Pacifico (Stati Uniti e Canada). La data di novembre è Pacific Standard Time, ovvero UTC-8, mentre la data di giugno è ora legale, ovvero 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
Un metodo di conversione per utilizzo generico
Nell'esempio seguente viene definito un metodo denominato ConvertFromDateTimeOffset che converte i DateTimeOffset valori in DateTime valori. In base all'offset, determina se il DateTimeOffset valore è un'ora UTC, un'ora locale o un'altra ora e definisce di conseguenza la proprietà del Kind valore di data e ora restituito.
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
Nell'esempio seguente viene chiamato il ConvertFromDateTimeOffset metodo per convertire DateTimeOffset i valori che rappresentano un'ora UTC, un'ora locale e un'ora nel fuso orario standard centrale degli Stati Uniti.
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
Annotazioni
Il codice effettua i due presupposti seguenti, a seconda dell'applicazione e dell'origine dei relativi valori di data e ora, potrebbe non essere sempre valido:
Si presuppone che un valore di data e ora il cui offset sia TimeSpan.Zero rappresenti l'ora UTC. Infatti, l'ora UTC non è un'ora in un particolare fuso orario, ma l'ora in relazione alla quale vengono standardizzati i fusi orari del mondo. I fusi orari possono anche avere un offset di Zero.
Si presuppone che una data e un'ora la cui offset sia uguale a quello del fuso orario locale rappresenta il fuso orario locale. Poiché i valori di data e ora sono disassociati dal fuso orario originale, questo potrebbe non essere il caso; la data e l'ora possono avere origine in un altro fuso orario con lo stesso offset.