Прочитать на английском

Поделиться через


DateTime.ToLocalTime Метод

Определение

Преобразует значение текущего объекта DateTime в местное время.

C#
public DateTime ToLocalTime();

Возвращаемое значение

Объект, свойство которого Kind равно Local, и значение которого является локальным временем, эквивалентным значению текущего DateTime объекта, или DateTime.MaxValue , если преобразованное значение слишком велико, чтобы быть представлено DateTime объектом, или DateTime.MinValue , если преобразованное значение слишком мало для представления в виде DateTime объекта.

Примеры

В следующем примере демонстрируется ToLocalTime метод. Обратите внимание, что точные выходные данные зависят от текущего языка и региональных параметров и местного часового пояса системы, в которой они выполняются.

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.

В следующем примере метод используется для SpecifyKind демонстрации влияния свойства на Kind методы ToLocalTime преобразования и 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

*/

Комментарии

Местное время равно времени в формате UTC и смещение в формате UTC. Дополнительные сведения о смещении в формате UTC см. в разделе TimeZoneInfo.GetUtcOffset. Преобразование также учитывает правило летнего времени, которое применяется к времени, представленному текущим DateTime объектом .

Важно!

В системах ToLocalTime Windows XP метод распознает только текущее правило корректировки при преобразовании из UTC в местное время. В результате преобразования за периоды до вступления в силу текущего правила корректировки могут не точно отражать разницу между временем в формате UTC и местным временем.

Начиная с платформа .NET Framework версии 2.0 значение, возвращаемое методом ToLocalTime , определяется Kind свойством текущего DateTime объекта . В следующей таблице описаны возможные результаты.

Kind Результаты
Utc Этот экземпляр DateTime преобразуется в местное время.
Local Преобразование не выполняется.
Unspecified Предполагается, что этот экземпляр DateTime является временем в формате UTC, а преобразование выполняется так, как если бы Kind они были Utc.

Примечание

Метод ToLocalTime преобразует DateTime значение из utc в местное время. Чтобы преобразовать время в любом указанном часовом поясе в местное время, используйте TimeZoneInfo.ConvertTime метод .

Значение, возвращаемое преобразованием , является , DateTime свойство которого Kind всегда возвращает Local. Следовательно, возвращается допустимый результат, даже если ToLocalTime применяется к одному и тому же DateTime.

Примечания для тех, кто вызывает этот метод

Метод можно использовать для ToLocalTime() восстановления локального значения даты и времени, преобразованного в формат UTC методом ToUniversalTime() или FromFileTimeUtc(Int64) . Однако если исходное время представляет собой недопустимое время в местном часовом поясе, оно не будет совпадать с восстановленным значением. ToLocalTime() Когда метод преобразует время из UTC в местный часовой пояс, он также корректирует время таким образом, чтобы оно было действительным в местном часовом поясе.

Например, переход от стандартного времени к летнему времени происходит в тихоокеанском часовом поясе США 14 марта 2010 года в 2:00, когда время увеличивается на один час, до 3:00. Этот интервал часов является недопустимым временем, то есть интервалом времени, который не существует в этом часовом поясе. В следующем примере показано, что, когда время, попадающее в этот диапазон, преобразуется в формат UTC методом ToUniversalTime() , а затем восстанавливается методом ToLocalTime() , исходное значение корректируется до допустимого времени. Можно определить, может ли конкретное значение даты и времени быть изменено, передав его IsInvalidTime(DateTime) в метод , как показано в примере.

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

Применяется к

Продукт Версии
.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

См. также раздел