Leggi in inglese

Condividi tramite


DateTime.ToLocalTime Metodo

Definizione

Converte il valore dell'oggetto DateTime corrente in un'ora locale.

C#
public DateTime ToLocalTime();

Restituisce

Oggetto la cui Kind proprietà è Locale il cui valore è l'ora locale equivalente al valore dell'oggetto corrente DateTime oppure DateTime.MaxValue se il valore convertito è troppo grande per essere rappresentato da un DateTime oggetto o DateTime.MinValue se il valore convertito è troppo piccolo per essere rappresentato come DateTime oggetto .

Esempio

Nell'esempio seguente viene illustrato il ToLocalTime metodo. Si noti che l'output esatto dipende dalle impostazioni cultura correnti e dal fuso orario locale del sistema in cui viene eseguito.

C#
using System;

class Example
{
    static void Main()
    {
        DateTime localDateTime, univDateTime;
        
        Console.WriteLine("Enter a date and time.");
        string strDateTime = Console.ReadLine();

        try {
            localDateTime = DateTime.Parse(strDateTime);
            univDateTime = localDateTime.ToUniversalTime();

            Console.WriteLine("{0} local time is {1} universal time.",
                                localDateTime,
                                    univDateTime);
        }
        catch (FormatException) {
            Console.WriteLine("Invalid format.");
            return;
        }

        Console.WriteLine("Enter a date and time in universal time.");
        strDateTime = Console.ReadLine();

        try {
            univDateTime = DateTime.Parse(strDateTime);
            localDateTime = univDateTime.ToLocalTime();

            Console.WriteLine("{0} universal time is {1} local time.",
                                     univDateTime,
                                     localDateTime);
        }
        catch (FormatException) {
            Console.WriteLine("Invalid format.");
            return;
        }
    }
}
// The example displays output like the following when run on a
// computer whose culture is en-US in the Pacific Standard Time zone:
//     Enter a date and time.
//     12/10/2015 6:18 AM
//     12/10/2015 6:18:00 AM local time is 12/10/2015 2:18:00 PM universal time.
//     Enter a date and time in universal time.
//     12/20/2015 6:42:00
//     12/20/2015 6:42:00 AM universal time is 12/19/2015 10:42:00 PM local time.

Nell'esempio seguente viene utilizzato il SpecifyKind metodo per illustrare come la Kind proprietà influisce sui ToLocalTime metodi di conversione e ToUniversalTime .

C#
// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
        // Get the date and time for the current moment, adjusted
        // to the local time zone.

        DateTime saveNow = DateTime.Now;

        // Get the date and time for the current moment expressed
        // as coordinated universal time (UTC).

        DateTime saveUtcNow = DateTime.UtcNow;
        DateTime myDt;

        // Display the value and Kind property of the current moment
        // expressed as UTC and local time.

        DisplayNow("UtcNow: ..........", saveUtcNow);
        DisplayNow("Now: .............", saveNow);
        Console.WriteLine();

        // Change the Kind property of the current moment to
        // DateTimeKind.Utc and display the result.

        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
        Display("Utc: .............", myDt);

        // Change the Kind property of the current moment to
        // DateTimeKind.Local and display the result.

        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
        Display("Local: ...........", myDt);

        // Change the Kind property of the current moment to
        // DateTimeKind.Unspecified and display the result.

        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
        Display("Unspecified: .....", myDt);
    }

    // Display the value and Kind property of a DateTime structure, the
    // DateTime structure converted to local time, and the DateTime
    // structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
        DateTime dispDt = inputDt;
        string dtString;

        // Display the original DateTime.

        dtString = dispDt.ToString(datePatt);
        Console.WriteLine("{0} {1}, Kind = {2}",
                          title, dtString, dispDt.Kind);

        // Convert inputDt to local time and display the result.
        // If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        // If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        // If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        // performed as if inputDt was universal time.

        dispDt = inputDt.ToLocalTime();
        dtString = dispDt.ToString(datePatt);
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                          dtString, dispDt.Kind);

        // Convert inputDt to universal time and display the result.
        // If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        // If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        // If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        // performed as if inputDt was local time.

        dispDt = inputDt.ToUniversalTime();
        dtString = dispDt.ToString(datePatt);
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                          dtString, dispDt.Kind);
        Console.WriteLine();
    }

    // Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
        string dtString = inputDt.ToString(datePatt);
        Console.WriteLine("{0} {1}, Kind = {2}",
                          title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Commenti

L'ora locale è uguale all'ora UTC (Coordinated Universal Time) più l'offset UTC. Per altre informazioni sull'offset UTC, vedere TimeZoneInfo.GetUtcOffset. La conversione tiene conto anche della regola dell'ora legale che si applica all'ora rappresentata dall'oggetto corrente DateTime .

Importante

Nei sistemi Windows XP, il ToLocalTime metodo riconosce solo la regola di regolazione corrente durante la conversione dall'ora UTC all'ora locale. Di conseguenza, le conversioni per periodi prima dell'entrata in vigore della regola di rettifica corrente potrebbero non riflettere in modo accurato la differenza tra ora UTC e ora locale.

A partire da .NET Framework versione 2.0, il valore restituito dal ToLocalTime metodo è determinato dalla Kind proprietà dell'oggetto corrente DateTime . Nella tabella seguente vengono descritti i risultati possibili.

Tipo Risultati
Utc Questa istanza di DateTime viene convertita in ora locale.
Local Non viene eseguita alcuna conversione.
Unspecified Questa istanza di DateTime viene considerata un'ora UTC e la conversione viene eseguita come se Kind fosse Utc.

Nota

Il ToLocalTime metodo converte un DateTime valore dall'ora UTC all'ora locale. Per convertire l'ora in qualsiasi fuso orario designato in ora locale, utilizzare il TimeZoneInfo.ConvertTime metodo .

Il valore restituito dalla conversione è un oggetto la DateTime cui Kind proprietà restituisce Localsempre . Di conseguenza, viene restituito un risultato valido anche se ToLocalTime viene applicato ripetutamente allo stesso DateTimeoggetto .

Note per i chiamanti

È possibile utilizzare il ToLocalTime() metodo per ripristinare un valore di data e ora locale convertito in FORMATO UTC dal ToUniversalTime() metodo o FromFileTimeUtc(Int64) . Tuttavia, se l'ora originale rappresenta un'ora non valida nel fuso orario locale, non corrisponderà al valore ripristinato. Quando il ToLocalTime() metodo converte un'ora dall'ora UTC al fuso orario locale, regola anche l'ora in modo che sia valida nel fuso orario locale.

Ad esempio, la transizione dall'ora solare all'ora legale si verifica nel fuso orario pacifico degli Stati Uniti il 14 marzo 2010 alle 2:00, quando l'ora avanza di un'ora, alle 3:00 Questo intervallo di ora è un'ora non valida, ovvero un intervallo di tempo che non esiste in questo fuso orario. Nell'esempio seguente viene illustrato che quando un'ora compresa in questo intervallo viene convertita in formato UTC dal ToUniversalTime() metodo e quindi ripristinata dal ToLocalTime() metodo , il valore originale viene modificato in modo da diventare un'ora valida. È possibile determinare se un determinato valore di data e ora può essere soggetto a modifiche passandolo al IsInvalidTime(DateTime) metodo , come illustrato nell'esempio.

C#
using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local);
      Console.WriteLine("Invalid time: {0}",
                        TimeZoneInfo.Local.IsInvalidTime(date1));
      DateTime utcDate1 = date1.ToUniversalTime();
      DateTime date2 = utcDate1.ToLocalTime();
      Console.WriteLine("{0} --> {1}", date1, date2);
   }
}
// The example displays the following output:
//       Invalid time: True
//       3/14/2010 2:30:00 AM --> 3/14/2010 3:30:00 AM

Si applica a

Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Vedi anche