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ươngDateTimeKind.Local: Chuyển đổi chính xác sang UTCDateTimeKind.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.