Преобразование объекта C# DateTime в метку времени файла захвата libpcap

StackOverflow https://stackoverflow.com/questions/1445865

  •  22-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top