2011-05-27 36 views
31

Quiero guardar las fechas como números en una tabla. Sé cómo hacer eso, pero no sé cómo regresar. ¿Cómo puedo convertir una variable larga a ToDateTime?Convertir DateTime a long y también al revés

DateTime now = DateTime.Now; 
long t = now.ToFileTime(); 
DateTime today = t.ToDateTime; // I am looking for something like this line. This Method does not exist 

Sé que hay muchas formas de convertir DateTime a long. No me importa qué técnica usar. Solo quiero tener una forma en la que pueda convertir de ida y vuelta.

+1

En el futuro considere agregar a su pregunta ** por qué ** necesita hacer algo. ¿Por qué "quieres almacenar fechas como números"? La mayoría de las bases de datos pueden almacenar fechas como fechas bien; ¿Hay algo especial sobre tu base de datos? Acerca de tus datos? Esta información puede influir en qué forma de conversión entre las fechas y los números es mejor para usted. –

+4

@DourHighArch: No estoy de acuerdo. La pregunta se formula con precisión y la intención es clara. "¿Tienes un 'DateTime', cómo convertirlo reversiblemente a 'long'?" Esta pregunta puede ser y merece ser respondida. Tenía precisamente esta pregunta, y obtuve la respuesta aquí mismo gracias al OP. No hay nada más frustrante que las respuestas que dicen "¿Por qué quieres hacer eso? Los DB pueden almacenar fechas y horas". Y la pregunta queda sin respuesta. –

Respuesta

8

de largo a DateTime: new DateTime(long ticks)

De DateTime a tiempo: DateTime.Ticks

5

Dado que está utilizando ToFileTime, tendrá que utilizar FromFileTime a ir a otro lado. Pero note:

Ordinariamente, el método FromFileTime restaura un valor DateTime que era salvado por el método ToFileTime. Sin embargo, los dos valores pueden diferir en las siguientes condiciones:

Si la serialización y la deserialización del valor DateTime se producen en diferentes zonas horarias. Para el ejemplo , si un valor de DateTime con un tiempo de 12:30 P.M. en el este de EE. UU. La zona horaria se serializa, y luego se deserializó en la zona horaria U.S. Pacific Time , el valor original de 12:30 P.M. se ajusta a las 9:30 a.m. para reflejar la diferencia entre las dos zonas de tiempo.

Si el valor de DateTime que se serializa representa un tiempo no válido en la zona horaria local. En este caso, el método ToFileTime ajusta el valor DateTime restaurado para que represente una hora válida en la zona horaria local .

Si no le importa lo que long representación de un DateTime se guarda, se puede utilizar Ticks como han sugerido otros (garrapatas es probablemente preferible, dependiendo de sus necesidades, ya que el valor devuelto por ToFileTime parece estar en el contexto de la API del sistema de archivos de Windows).

3

Hay varias posibilidades (tenga en cuenta que los valores de esos largos no son los mismos que la época Unix.

Para su ejemplo (para revertir ToFileTime()) sólo tiene que utilizar DateTime.FromFileTime(t).

0

No es un constructor DateTime eso toma mucho tiempo

DateTime today = new DateTime(t); // where t represents long format of dateTime