Pergunta

Eu estou preso na conversão de um objeto DateTime para um timestamp para o formato de arquivo de captura libpcap (também é utilizado por wireshark, formato de arquivo definitiom ) em C #. O timestamp não consegue converter meu objeto a é o Timestamp no cabeçalho do pacote (registro) (guint32 ts_sec e guint32 ts_usec).

Foi útil?

Solução

Você pode fazê-lo assim:

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

Outras dicas

É melhor para converter o Unix Epoch e seu dateToConvert a UTC antes de qualquer manipulação. Há um construtor para DateTime que leva um DateTimeKind para a construção do UnixEpoch, e não há um método ToUniversalTime () para a dateToConvert. Se você sempre quer Agora, existe uma propriedade DateTime.UtcNow útil que cuida disso para você. O código como escrito não deve ter quaisquer problemas, mas se você fizer isso uma função, uma data UTC poderia ser passado e trabalhando com uma data-alvo UTC e Unix Epoch locais certamente não daria o direito resultados, a menos que você está em GMT e não no tempo de verão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top