Question

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

Était-ce utile?

La solution

Vous pouvez le faire comme suit:

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);

Autres conseils

Il est préférable de convertir l’époque Unix et votre date de conversion en UTC avant toute manipulation. Il existe un constructeur pour DateTime qui prend un DateTimeKind pour construire UnixEpoch, et une méthode ToUniversalTime () pour le dateToConvert. Si vous voulez toujours maintenant, il existe une propriété DateTime.UtcNow très pratique qui s’occupe de cela pour vous. Le code tel qu'il est écrit ne devrait pas poser de problème, mais si vous en faites une fonction, une date UTC peut être transmise et une date cible UTC et une époque Unix locale ne donneraient certainement pas les bons résultats, à moins que vous ne soyez dans GMT et pas à l'heure d'été.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top