Sử dụng UTC
ISO 8601 ( định dạng ngày giờ MSDN )
Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");
2009-11-13T10: 39: 35Z
Chữ Z ở đó bởi vì
Nếu thời gian là UTC, hãy thêm 'Z' ngay sau thời gian mà không có dấu cách. 'Z' là ký hiệu vùng cho độ lệch UTC bằng không. Do đó, "09:30 UTC" được biểu thị là "09: 30Z" hoặc "0930Z". "14:45:15 UTC" sẽ là "14: 45: 15Z" hoặc "144515Z".
Nếu bạn muốn bao gồm một phần bù
int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours;
string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00"));
string isoformat = DateTime.Now.ToString("s") + offset;
Console.WriteLine(isoformat);
Hai điều cần lưu ý: + hoặc - là cần thiết sau thời gian nhưng rõ ràng + không hiển thị trên các số dương. Theo wikipedia, độ lệch có thể ở định dạng + hh hoặc + hh: mm. Tôi đã giữ chỉ vài giờ.
Theo như tôi biết, RFC1123 (ngày HTTP, định dạng "u") không có nghĩa là cung cấp hiệu số múi giờ. Tất cả thời gian đều là GMT / UTC.
UtcNow.ToString(s)+Z
là câu sai. ISO8601 được hỗ trợ bởi tùy chọn RoundTripToString("O")
. Cũng để chỉ ra rằng câu trả lời được chấp nhận sử dụng giá trị UTC của ngày giờ, sẽ luôn cung cấp múi giờ Z, thay vì chỉ sử dụng giá trị ngày giờ thực tế, (nếu Kind = Local) có thể chứa múi giờ tiết kiệm ánh sáng ban ngày. Cân nhắc thay đổi câu trả lời được chấp nhận?