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

Chuyển đổi DateTime hiện tại sang UTC trong C#

Giới thiệu

Phương thức ToUniversalTime() chuyển đổi DateTime từ giờ địa phương (local time) sang giờ UTC (Coordinated Universal Time). Kết quả phụ thuộc vào múi giờ của hệ thống và cài đặt daylight saving time.

Ví dụ 1: Chuyển đổi DateTime cố định

using System;

public class Demo
{
    public static void Main()
    {
        DateTime d = new DateTime(2019, 12, 11, 7, 11, 25);
        Console.WriteLine("Date = {0}", d);
        DateTime res = d.ToUniversalTime();
        Console.WriteLine("String representation = {0}", res);
    }
}

Kết quả

Date = 11/11/2019 7:11:25 AM
String representation = 11/11/2019 7:11:25 AM

Ví dụ 2: Parse chuỗi rồi chuyển sang UTC

using System;

public class Demo
{
    public static void Main()
    {
        DateTime localDate, universalDate;
        String str = "11/11/2019 4:10:55";
        localDate = DateTime.Parse(str);
        universalDate = localDate.ToUniversalTime();
        Console.WriteLine("Local time = {0} ", localDate);
        Console.WriteLine("Universal time = {0} ", universalDate);
    }
}

Kết quả

Local time = 11/11/2019 4:10:55 AM
Universal time = 11/11/2019 4:10:55 AM

Lưu ý quan trọng về DateTime.Kind

  • DateTimeKind.Unspecified (mặc định): ToUniversalTime() giả định là giờ địa phương
  • DateTimeKind.Local: Chuyển đổi chính xác sang UTC
  • DateTimeKind.Utc: Trả về chính nó (không chuyển đổi)
DateTime dt1 = new DateTime(2024, 1, 1, 12, 0, 0); // Unspecified
DateTime dt2 = DateTime.SpecifyKind(dt1, DateTimeKind.Local);
DateTime dt3 = DateTime.SpecifyKind(dt1, DateTimeKind.Utc);

Console.WriteLine(dt1.ToUniversalTime()); // Chuyển từ Local sang UTC
Console.WriteLine(dt2.ToUniversalTime()); // Chuyển từ Local sang UTC
Console.WriteLine(dt3.ToUniversalTime()); // Giữ nguyên (đã là UTC)

Khuyến nghị hiện đại

Sử dụng DateTimeOffset hoặc TimeZoneInfo cho xử lý múi giờ phức tạp, tránh nhầm lẫn với DateTime.Kind.