2011-08-03 14 views
5

Estoy tratando de convertir DateTime.MinValue a un valor DateTimeOffset pero obtengo una excepción ArgumentOutOfRange.Convirtiendo DateTime.MinValue a DateTimeOffset

Estaba viendo the MSDN article on implicit conversions of DateTime to DateTimeOffset y la sección Excepción indica que recibiré esta excepción ArgumentOutOfRange cuando;

... La fecha y la hora que resulte de aplicar el desplazamiento Tiempo Universal Coordinado (UTC) es anterior que MinValue. ...

¿Por qué entonces el siguiente código arroja la excepción;

DateTime test = DateTime.MinValue; 
DateTimeOffset dto = test; 

¿Es simplemente debido a mi zona horaria? Estoy en GMT +8, pero mi comprensión del código anterior es que la prueba se crea con un tipo No especificado.

Estoy trabajando en el problema simplemente probando MinValue de mi DateTime, y si es así, entonces uso DateTimeOffset.MinValue en su lugar.

Simplemente tengo curiosidad por saber por qué mi objeto DateTime tipo no especificado causa el error.

Respuesta

5

Si estás en GMT + 8, a continuación, una vez locales de DateTime.MinValue corresponde a un UTC hora anterior a DateTime.MinValue, por lo tanto, la excepción. De la documentación que hizo referencia:

Si el valor de la propiedad es DateTime.Kind DateTimeKind.Local o DateTimeKind.Unspecified, la fecha y la hora del objeto DateTimeOffset se establece igual a fecha y hora, y su propiedad Offset se establece igual al desplazamiento de la zona horaria actual del sistema local.

Así que lógicamente habría tener un DateTime de MinValue con un Offset de 8 horas, pero eso significa que la UTC fecha/hora que resulte de aplicar el desplazamiento es antes de lo que se puede representar.

(No olvide que agrega una diferencia respecto al UTC para obtener una hora local, o de resta desde una hora local para obtener UTC. En Noda Time hacemos cumplir esto mediante el uso de un tipo para cada una de Offset , LocalInstant y Instant, y solo le permiten realizar la operación apropiada ...)

+0

Gracias por eso Jon. No puedo creer que me haya perdido esa parte de la documentación. –

+1

Y esto explica un error en mi aplicación de Windows Phone que me ha estado molestando por un tiempo :) –