2011-07-01 100 views
13

¿Alguien puede explicar la diferencia entre System.DateTime y System.DateTimeOffset en C# .NET? El cual es el más adecuado para la construcción de aplicaciones web con usuarios de diferentes zonas horarias?Diferencia entre System.DateTime y System.DateTimeOffset

+0

duplicado de http://stackoverflow.com/questions/264617/when-would-you-prefer-datetime-over-datetimeoffset – V4Vendetta

Respuesta

9

Un valor de DateTime define una fecha y hora en particular, incluye una propiedad Kind que proporciona información limitada sobre la zona horaria a la que pertenece esa fecha y hora.

La estructura DateTimeOffset representa un valor de fecha y hora, junto con un desplazamiento que indica cuánto difiere ese valor de UTC. Así, el valor siempre identifica de forma inequívoca un único punto en el tiempo.

DateTimeOffset debe considerarse el tipo de fecha y hora predeterminado para el desarrollo de la aplicación, ya que los usos de los valores DateTimeOffset son mucho más comunes que los de los valores DateTime.

Ver más información, ejemplos de código en: http://msdn.microsoft.com/en-us/library/bb384267.aspx

+1

http://msdn.microsoft.com/en-us/library/system.datetime .kind.aspx –

2

Hay un par de puntos aquí:

información DateTime se debe almacenar en formato UTC en la base de datos:

http://www.4guysfromrolla.com/articles/081507-1.aspx

Cuando se utiliza la información DateTime en su aplicación web que tendrá que convertirlo a la hora local:

DateTime.UtcNow.ToLocalTime(); 

lo convertirá a la hora local desde la perspectiva del servidor web.

Si tiene un servidor web en un solo lugar, que atiende a clientes en varios países, entonces tendrá que realizar esta operación en JavaScript en el cliente en sí:

myUTCDate.toLocaleTimeString(); 

http://www.java2s.com/Code/JavaScript/Date-Time/ConvertDatetoLocaleString.htm

3

DateTimeOffset representa la fecha y hora como fecha y hora UTC.

Así

DateTimeOffset dtoNow = DateTimeOffset.Now; 

es igual que

DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow; 

Aquí dtoNow será igual a dtoUTCNow pesar de que uno se ha inicializado a DateTimeOffset.Now y el otro fue a inicializar DateTimeOffset.UTCNow;

So DatetimeOffset es bueno para almacenar la diferencia o Offset w.r.t UTC.

Para obtener más información, consulte MSDN.