The documentation does say:
[quote]
Formatting does not convert the time zone for the date and time object. Therefore, the application must convert a date and time to Coordinated Universal Time (UTC) before using this format specifier.
[/quote]
The following demonstrates how it will work if you call ToUniversalTime(). The use of SpecifyKind is a good practice so that processing a DateTime with Kind = DateTimeKind.Unspecified is avoided. This particular example will work correctly if those calls are omitted. Not all code that works with dates and times is so forgiving.
DateTime d = DateTime.SpecifyKind(new DateTime(2009, 4, 6, 18, 50, 00), DateTimeKind.Local);
string s = d.ToUniversalTime().ToString("u");
DateTime d2 = DateTime.SpecifyKind(DateTime.ParseExact(s, "u", null), DateTimeKind.Utc);
if (d.ToUniversalTime() == d2)
Console.WriteLine("OK"); // Prints OK
Also check out the similar format "o" (round-trip date/time pattern). It observes the Kind property of the DateTime to determine whether or not it writes out the Z designation. As the name suggests, it will round trip correctly.
I don't disagree that this is a potential pitfall, but it is one of many. Testing is a must when working with time zones.