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 位值,代表自 12:00 午夜 1601 A.D. (C.E.) 國際標準時間 (UTC) 以來經過的 100 奈秒間隔數。 當應用程式建立、存取或寫入檔案時,Windows 會使用檔案時間來記錄。

參數 fileTime 會指定以 100 奈秒刻度表示的檔案時間。

從 .NET Framework 2.0 版開始,傳回值為 DateTimeKind 屬性為 DateTimeKind.Local 的 。

給呼叫者的注意事項

一般而言, FromFileTime(Int64) 方法會 DateTime 還原 方法所 ToFileTime() 儲存的值。 不過,這兩個值在下列情況下可能會有所不同:

  • 如果值的序列化和還原序列化 DateTime 發生在不同的時區。 例如,如果 DateTime 美國東部時區中時間為 12:30 的值已序列化,然後在美國太平洋時區還原序列化,則原始值為 12:30 下午 9:30,以反映兩個時區之間的差異。

  • DateTime如果序列化的值代表當地時區中的無效時間。 在此情況下, ToFileTime() 方法會調整還原 DateTime 的值,使其代表當地時區中的有效時間。

    例如,從標準時間到日光節約時間的轉換發生在美國太平洋時區 2010 年 3 月 14 日,上午 2:00,時間在上午 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
    

適用於

另請參閱