Domanda

Sono bloccato nel convertire un oggetto DateTime in un timestamp per il formato del file di acquisizione libpcap (è anche usato da WireShark, formato file definitoom ) in C #. Il timestamp in cui non riesco a convertire il mio oggetto è il timestamp nell'intestazione del pacchetto (record) (guint32 ts_sec e guint32 ts_usec).

È stato utile?

Soluzione

Puoi farlo in questo modo:

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

Altri suggerimenti

È meglio convertire Unix Epoch e dateToConvert in UTC prima di qualsiasi manipolazione. Esiste un costruttore per DateTime che accetta un DateTimeKind per la costruzione di UnixEpoch e un metodo ToUniversalTime () per dateToConvert. Se vuoi sempre Now, c'è una pratica proprietà DateTime.UtcNow che si occupa di questo per te. Il codice come scritto non dovrebbe avere alcun problema, ma se rendi questa una funzione, una data UTC potrebbe essere passata e lavorare con una data target UTC e un'epoca Unix locale non darebbe sicuramente i risultati giusti a meno che tu non sia in GMT e non in estate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top