DateTime.ToLocalTime Metoda

Definicja

Konwertuje wartość bieżącego DateTime obiektu na czas lokalny.

C#
public DateTime ToLocalTime();

Zwraca

Obiekt, którego Kind właściwość to Local, i którego wartość jest czasem lokalnym równoważnym wartości bieżącego DateTime obiektu lub DateTime.MaxValue , jeśli przekonwertowana wartość jest zbyt duża, aby być reprezentowana przez DateTime obiekt lub DateTime.MinValue , jeśli przekonwertowana wartość jest zbyt mała, aby być reprezentowana jako DateTime obiekt.

Przykłady

W poniższym przykładzie pokazano metodę ToLocalTime . Należy pamiętać, że dokładne dane wyjściowe zależą od bieżącej kultury i lokalnej strefy czasowej systemu, na którym jest uruchamiany.

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.

W poniższym przykładzie użyto SpecifyKind metody , aby zademonstrować, jak Kind właściwość wpływa na ToLocalTime metody konwersji i .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

*/

Uwagi

Czas lokalny jest równy czasowi uniwersalnemu koordynowanego (UTC) oraz przesuniętemu czasowi UTC. Aby uzyskać więcej informacji na temat przesunięcia UTC, zobacz TimeZoneInfo.GetUtcOffset. Konwersja uwzględnia również regułę czasu letniego, która ma zastosowanie do czasu reprezentowanego przez bieżący DateTime obiekt.

Ważne

W systemach ToLocalTime Windows XP metoda rozpoznaje tylko bieżącą regułę korekty podczas konwertowania z czasu UTC na czas lokalny. W związku z tym konwersje okresów przed wprowadzeniem bieżącej reguły korekty mogą nie odzwierciedlać dokładnie różnicy między czasem UTC a czasem lokalnym.

Począwszy od .NET Framework w wersji 2.0, wartość zwrócona przez ToLocalTime metodę jest określana przez Kind właściwość bieżącego DateTime obiektu. W poniższej tabeli opisano możliwe wyniki.

Rodzaj Wyniki
Utc To wystąpienie klasy DateTime jest konwertowane na czas lokalny.
Local Nie jest wykonywana konwersja.
Unspecified Przyjmuje się, że to wystąpienie DateTime klasy jest czasem UTC, a konwersja jest wykonywana tak, jakby Kind była Utcto .

Uwaga

Metoda ToLocalTime konwertuje DateTime wartość z czasu UTC na czas lokalny. Aby przekonwertować czas w dowolnej wyznaczonej strefie czasowej na czas lokalny, użyj TimeZoneInfo.ConvertTime metody .

Wartość zwracana przez konwersję jest właściwością DateTime , której Kind właściwość zawsze zwraca wartość Local. W związku z tym zwracany jest prawidłowy wynik, nawet jeśli ToLocalTime jest wielokrotnie stosowany do tego samego DateTimeelementu .

Uwagi dotyczące wywoływania

Możesz użyć ToLocalTime() metody , aby przywrócić lokalną wartość daty i godziny przekonwertowaną na UTC przez metodę ToUniversalTime() or FromFileTimeUtc(Int64) . Jeśli jednak oryginalny czas reprezentuje nieprawidłowy czas w lokalnej strefie czasowej, nie będzie on zgodny z przywróconą wartością. ToLocalTime() Gdy metoda konwertuje czas od UTC do lokalnej strefy czasowej, dostosowuje również czas, tak aby był prawidłowy w lokalnej strefie czasowej.

Na przykład przejście od czasu standardowego do czasu letniego odbywa się w strefie czasowej Pacyfik USA 14 marca 2010 r., o godzinie 2:00, kiedy czas upływa o jedną godzinę, do godziny 3:00 Ten interwał godziny jest nieprawidłowym czasem, czyli interwałem czasu, który nie istnieje w tej strefie czasowej. W poniższym przykładzie pokazano, że gdy czas, który mieści się w tym zakresie, jest konwertowany na czas UTC przez ToUniversalTime() metodę, a następnie jest przywracany przez ToLocalTime() metodę, oryginalna wartość jest dostosowywana, aby stała się prawidłowym czasem. Można określić, czy określona wartość daty i godziny może podlegać modyfikacji, przekazując ją do IsInvalidTime(DateTime) metody, jak pokazano w przykładzie.

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

Dotyczy

Produkt Wersje
.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

Zobacz też