通过


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

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

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

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

调用方说明

通常,该方法 FromFileTime(Int64) 将还原 DateTime 方法 ToFileTime() 保存的值。 但是,这两个值在以下条件下可能有所不同:

  • 如果值的序列化和反序列化 DateTime 发生在不同的时区中。 例如,如果 DateTime 美国东部时区中时间为 12:30 的值为 12:30,然后在美国太平洋时区反序列化,则原始值为 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
    

适用于

另请参阅