Giới thiệu
Phương thức DateTimeOffset.FromFileTime(long) chuyển đổi Windows file time (số tick 100-nanosecond từ 1/1/1601 UTC) sang DateTimeOffset đại diện cho giờ địa phương.
Ví dụ 1: File time = 0 (epoch Windows)
using System;
public class Demo
{
public static void Main()
{
DateTimeOffset offset = DateTimeOffset.FromFileTime(0);
Console.WriteLine("DateTimeOffset = {0:dd} {0:y}, {0:hh}:{0:mm}:{0:ss} ", offset);
}
}
Kết quả
DateTimeOffset = 01 January 1601, 12:00:00
Ví dụ 2: File time = 200,000,000 (20 giây sau epoch)
using System;
public class Demo
{
public static void Main()
{
DateTimeOffset offset = DateTimeOffset.FromFileTime(200000000);
Console.WriteLine("DateTimeOffset = {0:dd} {0:y}, {0:hh}:{0:mm}:{0:ss} ", offset);
}
}
Kết quả
DateTimeOffset = 01 January 1601, 12:00:20
Giải thích Windows File Time
- Đơn vị: 100 nanoseconds (1 tick = 100ns = 0.1 microsecond)
- Epoch: 00:00:00 UTC, ngày 1 tháng 1 năm 1601
- Dùng trong NTFS, registry, Win32 API
- 1 giây = 10,000,000 ticks
- 1 ngày = 864,000,000,000 ticks
Chuyển đổi ngược: DateTimeOffset → FileTime
DateTimeOffset dto = DateTimeOffset.Now;
long fileTime = dto.ToFileTime();
Console.WriteLine("Current file time: " + fileTime);
// Hoặc từ DateTime (cần chỉ định Kind)
DateTime dt = DateTime.Now;
long fileTime2 = dt.ToFileTime(); // Giả định Local time
long fileTimeUtc = dt.ToUniversalTime().ToFileTimeUtc();
Phương thức liên quan
DateTime.FromFileTime(fileTime)- Trả về DateTime (Local)DateTime.FromFileTimeUtc(fileTime)- Trả về DateTime (UTC)DateTimeOffset.FromFileTime(fileTime)- Trả về DateTimeOffset (Local + Offset)DateTime.ToFileTime()- DateTime → FileTimeDateTime.ToFileTimeUtc()- DateTime UTC → FileTime