C#DateTimeオブジェクトをlibpcapキャプチャファイルのタイムスタンプに変換する
-
22-07-2019 - |
質問
DateTimeオブジェクトをlibpcapキャプチャファイル形式のタイムスタンプに変換することに固執しています(wiresharkでも使用されていますファイル形式の定義)C#。オブジェクトを変換できないタイムスタンプは、パケット(レコード)ヘッダーのタイムスタンプ(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エポックとdateToConvertをUTCに変換することをお勧めします。 UnixEpochを構築するためにDateTimeKindを取得するDateTimeのコンストラクターがあり、dateToConvertにToUniversalTime()メソッドがあります。常にNowが必要な場合は、それを処理する便利なDateTime.UtcNowプロパティがあります。書かれたコードに問題はないはずですが、これを関数にすると、UTC日付が渡され、UTCの目標日付で動作し、ローカルUnixエポックは、GMTと夏時間ではありません。
所属していません StackOverflow