estoy usando la estructura DateTimeWithZone que Jon Skeet publicada en Creating a DateTime in a specific Time Zone in c# fx 3.5Convertir DateTime a UTC sólo si no está ya Utc
Esto no funcionó exactamente para mi situación, ya que se supone que el DateTime pasado en el constructor es la hora local, y por lo tanto, lo convierte a Utc utilizando la TimeZone especificada.
En mi caso, generalmente pasaremos objetos DateTime que ya están en Utc (ya que esto es lo que estamos almacenando), así que solo debemos realizar la conversión si el DateTime.Kind fuente no es Utc.
lo que he cambiado el constructor para:
public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, DateTimeKind kind = DateTimeKind.Utc) {
dateTime = DateTime.SpecifyKind(dateTime, kind);
utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone);
this.timeZone = timeZone;
}
Aquí tenemos un parámetro de tipo opcional que por defecto a la hora UTC.
Sin embargo, la ejecución de este código y pasar un Utc DateTime genera la siguiente excepción:
La conversión no pudo completarse debido a que el DateTime suministrado no tenía la propiedad Kind ajustado correctamente. Por ejemplo, cuando la propiedad Kind es DateTimeKind.Local, la zona horaria de origen debe ser TimeZoneInfo.Local.
Según los docs (http://msdn.microsoft.com/en-us/library/bb495915.aspx):
Si la propiedad Kind del parámetro dateTime es igual DateTimeKind.Utc y el parámetro es igual a sourceTimeZone TimeZoneInfo.Utc, este método devuelve dateTime sin realizar ninguna conversión.
Dado que tanto el tiempo de entrada como la zona horaria tienen una propiedad Kind de Utc, entonces no esperaría obtener esta excepción.
¿He entendido mal?
¿Es su OS XP? – V4Vendetta
No, es Windows 7 –