Por qué no sólo tiene que utilizar The Round-trip ("O", "o") Format Specifier?
La "O" u "o" especificador de formato estándar representa una cadena de formato de fecha y hora personalizado utilizando un patrón que se conserva la información de zona horaria y emite una cadena de resultado que cumpla con la norma ISO 8601. Para los valores de fecha y hora, este formato El especificador está diseñado para conservar los valores de fecha y hora junto con la propiedad DateTime.Kind en el texto. La cadena formateada se puede analizar sintácticamente utilizando el método DateTime.Parse (String, IFormatProvider, DateTimeStyles) o DateTime.ParseExact si el parámetro de estilos se establece en DateTimeStyles.RoundtripKind.
El especificador de formato estándar "O" o "o" corresponde a la cadena de formato personalizado "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '.' FffffffK" para DateTime valores y al "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '.' fffffffzzz" cadena de formato personalizado para los valores de DateTimeOffset. En esta cadena, los pares de comillas simples que delimitan caracteres individuales, como los guiones, los dos puntos y la letra "T", indican que el carácter individual es un literal que no puede modificarse. Los apóstrofes no aparecen en la cadena de salida.
El especificador de formato estándar O "o" o "(y el" aaaa "- 'MM' - 'dd'T'HH': 'mm': 'ss'. 'FffffffK" cadena de formato personalizado) aprovecha una de las tres formas en que la norma ISO 8601 representa la información de zona horaria para preservar la propiedad tipo de valores 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: ¿Te gustaría decirnos qué piensas que está mal con esta respuesta? – LukeH
Esto funcionó pero .ToUniversalTime() estropeará su fecha existente si ya está en UTC pero la variable yourDateTime no lo especifica. Terminé eliminando .ToUniversalTime() y las fechas se alinearon con lo que se esperaba en ambos extremos (base de datos y cliente web). –