DateTime.FromFileTime(Int64) Method

Definition

Converts the specified Windows file time to an equivalent local time.

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

Parameters

fileTime
Int64

A Windows file time expressed in ticks.

Returns

DateTime

An object that represents the local time equivalent of the date and time represented by the fileTime parameter.

Exceptions

fileTime is less than 0 or represents a time greater than DateTime.MaxValue.

Examples

The following example demonstrates the FromFileTime method.

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

Remarks

A Windows file time is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC). Windows uses a file time to record when an application creates, accesses, or writes to a file.

The fileTime parameter specifies a file time expressed in 100-nanosecond ticks.

Starting with the .NET Framework version 2.0, the return value is a DateTime whose Kind property is DateTimeKind.Local.

Notes to Callers

Ordinarily, the FromFileTime(Int64) method restores a DateTime value that was saved by the ToFileTime() method. However, the two values may differ under the following conditions:

  • If the serialization and deserialization of the DateTime value occur in different time zones. For example, if a DateTime value with a time of 12:30 P.M. in the U.S. Eastern Time zone is serialized, and then deserialized in the U.S. Pacific Time zone, the original value of 12:30 P.M. is adjusted to 9:30 A.M. to reflect the difference between the two time zones.

  • If the DateTime value that is serialized represents an invalid time in the local time zone. In this case, the ToFileTime() method adjusts the restored DateTime value so that it represents a valid time in the local time zone.

    For example, the transition from standard time to daylight saving time occurs in the U.S. Pacific Time zone on March 14, 2010, at 2:00 A.M., when the time advances by one hour, to 3:00 A.M. This hour interval is an invalid time, that is, a time interval that does not exist in this time zone. The following example shows that when a time that falls within this range is converted to a long integer value by the ToFileTime() method and is then restored by the FromFileTime(Int64) method, the original value is adjusted to become a valid time. You can determine whether a particular date and time value may be subject to modification by passing it to the IsInvalidTime(DateTime) method, as the example illustrates.

    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
    

Applies to

See also