Tại sao không chỉ sử dụng Định dạng khứ hồi ("O", "o") ?
Bộ xác định định dạng chuẩn "O" hoặc "o" đại diện cho một chuỗi định dạng ngày và giờ tùy chỉnh bằng cách sử dụng một mẫu lưu giữ thông tin múi giờ và tạo ra một chuỗi kết quả tuân theo ISO 8601. Đối với các giá trị DateTime, bộ định dạng này được thiết kế để lưu giữ ngày và giá trị thời gian cùng với thuộc tính DateTime.Kind trong văn bản. Chuỗi đã định dạng có thể được phân tích cú pháp lại bằng cách sử dụng phương thức DateTime.Parse (String, IFormatProvider, DateTimeStyles) hoặc DateTime.ParseExact nếu tham số kiểu được đặt thành DateTimeStyles.RoundtripKind.
Mã định dạng chuẩn "O" hoặc "o" tương ứng với chuỗi định dạng tùy chỉnh "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '.' FffffffK" cho các giá trị DateTime và "yyyy" - 'MM' - 'dd'T'HH': 'mm': 'ss'. 'fffffffzzz "chuỗi định dạng tùy chỉnh cho các giá trị DateTimeOffset. Trong chuỗi này, các cặp dấu ngoặc kép phân tách các ký tự riêng lẻ, chẳng hạn như dấu gạch ngang, dấu hai chấm và chữ "T", cho biết rằng ký tự riêng lẻ là một chữ không thể thay đổi. Dấu nháy đơn không xuất hiện trong chuỗi đầu ra.
Bộ định dạng định dạng chuẩn O "hoặc" o "(và chuỗi định dạng tùy chỉnh" yyyy "- 'MM' - 'dd'T'HH': 'mm': 'ss'. 'FffffffK") tận dụng lợi thế của ba cách ISO 8601 đại diện cho thông tin múi giờ để duy trì thuộc tính Loại của các giá trị DateTime:
public class Example
{
public static void Main()
{
DateTime dat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Unspecified);
Console.WriteLine("{0} ({1}) --> {0:O}", dat, dat.Kind);
DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Utc);
Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind);
DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Local);
Console.WriteLine("{0} ({1}) --> {0:O}\n", lDat, lDat.Kind);
DateTimeOffset dto = new DateTimeOffset(lDat);
Console.WriteLine("{0} --> {0:O}", dto);
}
}