Конвертируйте объект C # DateTime в метку времени файла захвата libpcap - PullRequest
1 голос
/ 18 сентября 2009

Я застрял в преобразовании объекта DateTime в метку времени для формата файла захвата libpcap (также используется wireshark, определением формата файла ) в C #. Временная метка, в которую я не могу преобразовать свой объект, является временной меткой в ​​заголовке пакета (записи) (guint32 ts_sec и guint32 ts_usec).

Ответы [ 2 ]

6 голосов
/ 18 сентября 2009

Вы можете сделать это так:

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 голосов
/ 28 сентября 2009

Лучше всего конвертировать Unix Epoch и your dateToConvert в UTC перед любыми манипуляциями. Существует конструктор для DateTime, который принимает DateTimeKind для построения UnixEpoch, и есть метод ToUniversalTime () для dateToConvert. Если вы всегда хотите сейчас, есть удобное свойство DateTime.UtcNow, которое позаботится об этом за вас. В написанном коде не должно быть никаких проблем, но если вы сделаете это функцией, можно будет передать дату UTC и работать с целевой датой UTC, а локальная эпоха Unix, безусловно, не даст правильных результатов, если вы не находитесь в GMT и не в летнее время.

...