2008-11-05 16 views
43

Hace unos meses me presentaron el nuevo tipo DateTimeOffset y me alegré de que las fallas de DateTime con respecto a las zonas horarias finalmente se hubieran solucionado.Cuándo preferirías DateTime sobre DateTimeOffset

Sin embargo, me preguntaba si hubo algún problema o sobrecarga que podría ocurrir al usar este nuevo tipo.

Trabajo en una aplicación web multi-locale. ¿Alguien sabe de algo que me pueda convencer de usarlo para todo mi trabajo de fecha y hora? ¿Hay una ventana para el abuso aquí?

Referencia: DateTimeOffset: A New DateTime Structure in .NET 3.5 by Justin Van Patten

+0

Pregunta relacionada - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded

+0

Véase también [esta respuesta] (http://stackoverflow.com/a/14268167) –

Respuesta

42

A veces lo que realmente quieres para representar un (conscientes zona horaria) Fecha "local" y el tiempo en lugar de un instantánea en el tiempo. Para ser sincero, a menudo es más útil representar solo un tiempo, p. "despiértame a las 8 a.m., independientemente de la zona horaria", pero la fecha y la hora también podrían ser útiles.

Acepto que para la gran mayoría de los casos, DateTimeOffset es un mejor ajuste. Me parece extraño que no haya una estructura DateTimeTimeZone que tenga tanto el instante como su zona horaria ... un desplazamiento en realidad no le proporciona toda la información que necesita. (Por ejemplo, dado un DateTimeOffset, no sabe cuál será el tiempo 24 horas después, porque no sabe cuándo podría activarse el DST).

Si quiere ese tipo de estructura, tengo un very crude implementation in another answer. Estoy seguro de que podría mejorarse muy fácilmente :)

+2

Siempre puede representar sus tiempos en UTC y convertir a un huso horario específico cuando sea necesario ... –

+2

Omer: Pero a menudo también desea conservar la información de la zona horaria. Sí, a menudo puede salir solo con la hora UTC, pero para eventos recurrentes y similares también necesita conocer la zona horaria. –

+0

Por lo general, la hora local solo debería usarse para futuras fechas, donde desea que se ajusten con los cambios de zona horaria. Los datos históricos siempre deben almacenarse en un huso horario consistente, probablemente UTC, aunque puede haber razones históricas para otro. (Ejemplo: para los datos de transacciones de NYSE, es posible que desee EST en general). – Ben

3

Bueno, una respuesta obvia sería cuando necesitas admitir clientes sin el SP que se envía (en realidad no está en 3.5 - está en 2.0 SP1 , que se envió al mismo tiempo).

+0

Cierto, pero en realidad estaba hablando internamente en mi código y en la capa de la interfaz de usuario. –

+2

Bastante justo. Pensé que lo mencionaría porque VS multi-targeting no lo hace obvio cuando usaste las características del SP1 mientras supuestamente apuntaba a 2.0. Ahora hay un complemento de FxCop (etc.) para hacer esto, al menos. –

Cuestiones relacionadas