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


DateTime.FromFileTime(Int64) Метод

Определение

Преобразует заданную временную характеристику файла Windows в ее эквивалент по местному времени.

public:
 static DateTime FromFileTime(long fileTime);
public static DateTime FromFileTime (long fileTime);
static member FromFileTime : int64 -> DateTime
Public Shared Function FromFileTime (fileTime As Long) As DateTime

Параметры

fileTime
Int64

Временная характеристика файла Windows, выраженная в тактах.

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

Объект, представляющий местное время, эквивалентное дате и времени, которые определяются параметром fileTime.

Исключения

fileTime значение меньше 0 или представляет время, превышающее значение DateTime.MaxValue.

Примеры

В следующем примере демонстрируется FromFileTime метод.

System::TimeSpan FileAge( long fileCreationTime )
{
   System::DateTime now = System::DateTime::Now;
   try
   {
      System::DateTime fCreationTime =
         System::DateTime::FromFileTime( fileCreationTime );
      System::TimeSpan fileAge = now.Subtract( fCreationTime );
      return fileAge;
   }
   catch ( ArgumentOutOfRangeException^ ) 
   {
      // fileCreationTime is not valid, so re-throw the exception.
      throw;
   }
}
open System

let fileAge fileCreationTime =
    let now = DateTime.Now
    try
        let fCreationTime =
            DateTime.FromFileTime fileCreationTime
        now.Subtract fCreationTime
    with :? ArgumentOutOfRangeException ->
        // fileCreationTime is not valid, so re-raise the exception.
        reraise ()
public System.TimeSpan FileAge(long fileCreationTime) {

    System.DateTime now = System.DateTime.Now;
    try {
        System.DateTime fCreationTime =
            System.DateTime.FromFileTime(fileCreationTime);
        System.TimeSpan fileAge = now.Subtract(fCreationTime);
        return fileAge;				
    }
    catch (ArgumentOutOfRangeException) {
        // fileCreationTime is not valid, so re-throw the exception.
        throw;
    }
}
Public Function FileAge(ByVal fileCreationTime As Long) As System.TimeSpan
   Dim now As System.DateTime
   now = System.DateTime.Now

   Try
      Dim fCreationTime As System.DateTime
      Dim fAge As System.TimeSpan
      fCreationTime = System.DateTime.FromFileTime(fileCreationTime)
      fAge = now.Subtract(fCreationTime)
      Return fAge
   Catch exp As ArgumentOutOfRangeException
      ' fileCreationTime is not valid, so re-throw the exception.
      Throw
   End Try
End Function

Комментарии

Время файла Windows — это 64-разрядное значение, представляющее количество 100-наносекундных интервалов, прошедших с 12:00 полуночи 1 января 1601 г. н.э. (C.E.) Время в формате UTC. Windows использует время файла для записи, когда приложение создает файл, обращается к файлу или записывает его.

Параметр fileTime задает время файла, выраженное в 100-наносекундных тактах.

Начиная с платформа .NET Framework версии 2.0, возвращаемым значением DateTime является , свойство которого Kind имеет значение DateTimeKind.Local.

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

Обычно метод восстанавливает значение, FromFileTime(Int64) сохраненное DateTime методом ToFileTime() . Однако эти два значения могут отличаться при следующих условиях:

  • Если сериализация и десериализация DateTime значения происходят в разных часовых поясах. Например, если DateTime значение со временем 12:30 в восточном часовом поясе США сериализуется, а затем десериализуется в Тихоокеанском часовом поясе США, исходное значение 12:30 корректируется до 9:30, чтобы отразить разницу между двумя часовыми поясами.

  • Если сериализованное DateTime значение представляет недопустимое время в местном часовом поясе. В этом случае метод корректирует восстановленное DateTime значение таким образом, ToFileTime() чтобы оно представляло допустимое время в местном часовом поясе.

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

    using System;
    
    public class Example
    {
       public static void Main()
       {
          DateTime date1 = new DateTime(2010, 3, 14, 2, 30, 00);
          Console.WriteLine("Invalid Time: {0}",
                            TimeZoneInfo.Local.IsInvalidTime(date1));
          long ft = date1.ToFileTime();
          DateTime date2 = DateTime.FromFileTime(ft);
          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
    
    open System
    
    let date1 = DateTime(2010, 3, 14, 2, 30, 00)
    printfn $"Invalid Time: {TimeZoneInfo.Local.IsInvalidTime date1}"
    
    let ft = date1.ToFileTime()
    let date2 = DateTime.FromFileTime ft
    printfn $"{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
    
    Module Example
       Public Sub Main()
          Dim date1 As New DateTime(2010, 3, 14, 2, 30, 00)
          Console.WriteLine("Invalid Time: {0}", TimeZoneInfo.Local.IsInvalidTime(date1))
          Dim ft As Long = date1.ToFileTime()
          Dim date2 As DateTime = DateTime.FromFileTime(ft)
          Console.WriteLine("{0} -> {1}", date1, date2) 
       End Sub
    End Module
    ' The example displays the following output:
    '       Invalid Time: True
    '       3/14/2010 2:30:00 AM -> 3/14/2010 3:30:00 AM
    

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

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