2009-09-18 10 views
1

Je suis bloqué dans la conversion d'un objet DateTime en timestamp pour le format du fichier de capture libpcap (également utilisé par wireshark, file format definitiom) en C#. L'horodateur pour lequel je n'arrive pas à convertir mon objet est l'horodatage dans l'en-tête de paquet (enregistrement) (guint32 ts_sec et guint32 ts_usec).Convertir l'objet C# DateTime en horodatage du fichier de capture libpcap

+0

Il semble que ces horodatages ne soient que le nombre de secondes sous la forme d'uint32 et de microsecondes sous la forme d'uint32. À une estimation, ceux-ci sont mesurés depuis le début de l'Epoque UNIX (1 janvier 1970 00:00:00 UTC) – Powerlord

+0

Ils sont - Je viens de poster du code pour faire la conversion. –

Répondre

6

Vous pouvez le faire comme ceci:

DateTime dateToConvert = DateTime.Now; 
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
TimeSpan diff = date - origin; 

// Seconds since 1970 
uint ts_sec = Math.Floor(diff.TotalSeconds); 
// Microsecond offset 
uint ts_usec = 1000000 * (diff.TotalSeconds - ts_sec); 
+0

Cela fonctionne. Merci beaucoup =). – Emiswelt

+0

Bonne réponse. Ici même en arithmétique entière utilisant membre .Ticks. 'TimeSpan ts = YourDateTime - new DateTime (1970, 1, 1, 0, 0, 0, 0); UInt32 ts_sec = (UInt32) (ts.Ticks/10000000); UInt32 ts_usec = (UInt32) ((ts.Ticks/10)% 1000000); ' – user3042599

0

Il est préférable de convertir l'époque Unix et votre dateToConvert à UTC avant toute manipulation. Il existe un constructeur pour DateTime qui prend un DateTimeKind pour la construction de UnixEpoch, et il existe une méthode ToUniversalTime() pour la dateToConvert. Si vous voulez toujours Maintenant, il existe une propriété DateTime.UtcNow pratique qui prend soin de cela pour vous. Le code tel qu'il est écrit ne devrait pas avoir de problème, mais si vous faites cela, une date UTC pourrait être passée et travailler avec une date cible UTC et une époque Unix locale ne donnerait certainement pas les bons résultats sauf si vous êtes en GMT et pas sur l'heure d'été.