Tại sao không chỉ cần sử dụng The Round-trip ("O", "o") Format Specifier?
Trình định dạng định dạng chuẩn "O" hoặc "o" biểu thị chuỗi ngày và giờ tùy chỉnh sử dụng mẫu lưu giữ thông tin múi giờ và phát ra chuỗi kết quả tuân theo ISO 8601. specifier được thiết kế để bảo tồn các giá trị ngày tháng và 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 trở 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.
Trình định dạng định dạng chuẩn "O" hoặc "o" tương ứng với "yyyy" - 'MM' - 'dd'T'HH': 'mm': 'ss'. 'FffffffK "chuỗi định dạng tùy chỉnh cho DateTime các giá trị và cho "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 nháy đơn phân định các ký tự riêng lẻ, chẳng hạn như dấu gạch nối, dấu hai chấm và chữ cái "T", cho biết ký tự riêng lẻ là chữ không thể thay đổi. Các dấu nháy đơn không xuất hiện trong chuỗi đầu ra.
Trình định dạng định dạng chuẩn O "hoặc" o "(và" yyyy "- 'MM' - 'dd'T'HH': 'mm': 'ss'. 'FffffffK" chuỗi định dạng tùy chỉnh) tận dụng lợi thế trong ba cách mà ISO 8601 đại diện cho thông tin múi giờ để bảo vệ tài sản Loại 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);
}
}
// The example displays the following output:
// 6/15/2009 1:45:30 PM (Unspecified) --> 2009-06-15T13:45:30.0000000
// 6/15/2009 1:45:30 PM (Utc) --> 2009-06-15T13:45:30.0000000Z
// 6/15/2009 1:45:30 PM (Local) --> 2009-06-15T13:45:30.0000000-07:00
//
// 6/15/2009 1:45:30 PM -07:00 --> 2009-06-15T13:45:30.0000000-07:00
@Downvoter: Bạn có muốn cho chúng tôi biết bạn nghĩ gì sai với câu trả lời này không? – LukeH
Điều này làm việc nhưng .ToUniversalTime() sẽ mess up ngày hiện tại của bạn nếu nó đã ở UTC nhưng biến yourDateTime không xác định nó. Tôi đã kết thúc việc loại bỏ .ToUniversalTime() và các ngày sau đó xếp hàng với những gì được mong đợi ở cả hai đầu (cơ sở dữ liệu và máy khách web). –