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 位值,表示自 A.1601 年 1 月 1 日午夜 12:00(午夜 1601 年 1 月 1 日) (C.E.) 协调世界时 (UTC) 以来经过的 100 纳秒间隔数。 Windows 使用文件时间来记录应用程序创建、访问或写入文件时的时间。

参数 fileTime 指定以 100 纳秒刻度表示的文件时间。

从 .NET Framework 版本 2.0 开始,返回值为 ,DateTimeKind 属性为 DateTimeKind.Local

调用方说明

通常, FromFileTime(Int64) 方法还原 DateTimeToFileTime() 方法保存的值。 但是,在以下情况下,这两个值可能有所不同:

  • 如果值的序列化和反序列化 DateTime 发生在不同的时区。 例如,如果 DateTime 对美国东部时区时间为 12:30 P.M. 的值进行序列化,然后在美国太平洋时区反序列化,则会将原始值 12:30 P.M. 调整为上午 9:30,以反映两个时区之间的差异。

  • DateTime如果序列化的值表示本地时区中的无效时间。 在这种情况下, ToFileTime() 方法调整还原 DateTime 的值,使其表示本地时区中的有效时间。

    例如,从标准时间到夏令时制的转换发生在美国太平洋时区 2010 年 3 月 14 日凌晨 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
    

适用于

另请参阅