質問

こんにちは

I UTCの日時を表す整数を含むフィールドを持つレガシーデータベースがあります

ドキュメントから: " CDR内のタイムスタンプは、協定世界時(UTC)で表示されます。この値は残ります 夏時間の変更とは無関係

値の例は1236772829です。

私の質問は、UTC値とローカル時間値の両方として、.NET DateTime(DBではなくCLRコード)に変換する最良の方法は何ですか?

Googleを試してみましたが、運はありませんでした。

事前に感謝 /ヨハン

役に立ちましたか?

解決

その正確なフレーズをグーグルで検索すると、このCicsoページ、続いて"フィールドは、オペレーティングシステムから取得したtime_t値を指定します。 "

time_t は、厳密に言えば特定のものである必要のないCライブラリの概念です。ただし、UNIX-yシステムの通常は、1970年1月1日00:00のUnixエポックの開始からの秒数になります。

これが正しいと仮定すると、このコードはintからDateTimeを提供します:

        DateTime epochStart = new DateTime(1970, 1, 1);

        int cdrTimestamp = 1236772829;

        DateTime result = epochStart.AddSeconds(cdrTimestamp);

        // Now result is 2009 March 11 12:00:29

これらの time_t の正しい解釈であることを確認するには、取得した結果を健全性チェックする必要があります。

他のヒント

整数の実際の意味を知る必要があります。通常、これは次のもので構成されます。

  • エポック/オフセット(つまり、0の意味)-たとえば、「1970年1月1日午前0時」
  • スケール、たとえば秒、ミリ秒、ティック。

2つの値を取得でき、UTCでそれらが意味するものであれば、残りは簡単です。最も簡単な方法は、おそらくエポックとして DateTime (または DateTimeOffset )を持ち、整数から TimeSpan を構築することです。 TimeSpan.FromMilliseconds など。2つを一緒に追加して完了です。編集:AddSeconds または AddMilliseconds を使用する"> aakashmの答えは、このビットを行う簡単な方法です:)

また、自分で計算を行い、 DateTime コンストラクタは多数のティックを取得します。 (おそらく、 DateTimeKind を使用するバージョンの方が優れているため、UTCであることを明示的に指定できます。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top