DateTime.FromFileTime(Int64) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将指定的 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 开始,返回值为 ,DateTime其 Kind 属性为 DateTimeKind.Local。
调用方说明
通常, FromFileTime(Int64) 方法还原 DateTime 由 ToFileTime() 方法保存的值。 但是,在以下情况下,这两个值可能有所不同:
如果值的序列化和反序列化 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