2011-06-08 22 views

Respuesta

6

Depende de cómo se definió time_t en los archivos de encabezado Standard C con los que se compiló el archivo DLL.

Si time_t es de 64 bits, el equivalente de C# es long.

Si time_t tiene 32 bits, entonces tiene el error Year 2038 y debe preguntarle a quien haya escrito la DLL por una versión que no tenga errores.

2

Según Wikipedia's article on Time_t podría usar un integer (Int32 or Int64)

Unix y sistemas compatibles con POSIX implementar time_t como un entero o de tipo flotante real (típicamente un número entero de 32 o 64 bits) que representa el número de segundos desde el inicio de la época de Unix: medianoche UTC del 1 de enero de 1970 (sin contar los segundos intercalares).

7

No creo que debería decir que son equivalentes, pero se puede convertir t_time-DateTime de tal manera:

int t= 1070390676; // value of time_t in an ordinary integer 
System.DateTime dt= new System.DateTime(1970,1,1).AddSeconds(t); 

Y este ejemplo es de How can I convert date-time data in time_t to C# DateTime class format?

También debo decir que UInt32 se usa para t_ time, too.check DateTime to time_t

+1

La forma más conveniente –

+0

No relevante e incorrecta. – jheriko

+0

@jheriko muchas gracias por tu comentario. Ya dije que esto no sería equivalente. Sin embargo, al ver esta respuesta aquí con algunos upvotes, creo que esta respuesta dio ideas a algunas personas y las ayudó. ¿Podría decirme qué es incorrecto? – Bastardo

0

La solución de Bastardo no me ayudó. Me enfrentaba a un problema con el horario de verano, por lo que se requería una conversión adicional a la hora local, o el tiempo resultante difería en una hora. Esto es lo que hago:

return new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time_t); 
Cuestiones relacionadas