Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chuyển đổi Windows file time sang giờ địa phương trong C#

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 → FileTime
  • DateTime.ToFileTimeUtc() - DateTime UTC → FileTime