Використовуючи UTC
ISO 8601 ( формати дати MSDN )
Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");
2009-11-13T10: 39: 35Z
Z є , тому що
Якщо час у UTC, додайте "Z" безпосередньо після часу без пробілу. 'Z' - це позначення зони для нульового зміщення UTC. Тому "09:30 UTC" представлено як "09: 30Z" або "0930Z". "14:45:15 UTC" було б "14: 45: 15Z" або "144515Z".
Якщо ви хочете включити зміщення
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);
Дві речі, які слід зазначити: + або - потрібен після закінчення часу, але очевидно + не відображається на позитивних цифрах. Згідно з wikipedia, зміщення може бути у форматі + hh або + hh: mm. Я тримався лише години.
Наскільки я знаю, RFC1123 (дата HTTP, формат "u") не повинен давати зрушення в часовому поясі. Часовий час призначений для GMT / UTC.
UtcNow.ToString(s)+Z- неправильна. ISO8601 підтримується опцією RoundTripToString("O"). Також слід зазначити, що прийнята відповідь використовує значення UTC за датою, яке завжди дало б часовий пояс Z, а не просто використовує фактичне значення дати, яке (якщо Kind = Місцеве) може містити часовий пояс для переходу на літній час. Подумаєте змінити прийняту відповідь?