2017-07-28 9 views
2

この質問はさまざまな形で何度も述べられていますが、私が経験している特定の問題を解決するものはありません。私は、受信データをC#DateTime変数に変換するために使用する以下のメソッドを持っています。問題は、データを送信している会社が、自分のシステムに1時間遅れて表示されているため、誤って変換していると主張しているということです。私はこれが英国サマータイムと関係があると思っていますが、私はToLocalTimeを使用しているという事実によって、イギリスのサマータイムを以下の方法で考慮していると思っていたので、最後か最後に問題になりますか?どんな援助も感謝して受け入れられるだろう。C#Unixタイムスタンプto DateTime

private DateTime ConvertTimeStamp(double t) 
{ 
    return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) 
     .AddMilliseconds(t) 
     .ToLocalTime(); 
} 
+0

良い点mjwills - なぜ私はそれを気付かなかったのかわからない。上記のコードは、読みやすくするために編集します。 – user470249

+0

残念ながら、生データの例はありませんでした。多分助けにはなりませんでしたが、彼らは次の日時を送信していると主張しています。 18/07/2017 16:28:09 - これは私のシステムにあります(上記の方法を使って入ってくるタイムスタンプを変換しています)。 18/07/2017 15:28:09 – user470249

+1

テストで使用するためのサンプルデータをいくつか提供してもらえますか?すなわち、彼らはあなたにいくつかの数字とそれらが表現すべき日時を送ります。そして、それらを適切にテストするために使うことができます。私は彼らがこれをするのを嫌っているとは想像できません... – Chris

答えて

4

ToLocalTime現地時間は、実際にこの方法を実行しているコンピュータでは何でもするタイムゾーンを調整します。クラウドのどこから実行/展開されているかによって、大きく異なる結果が得られます。時間帯は、この種のもののためにお尻に大きな痛みを与えることができます。 UTCのUnix表現をあなたに送信し、ToUniversalとからDateTimeをアンラップすることができれば、を安全にあなたの選択したタイムゾーンに戻すことができます。

UTCを送信していない場合は、ToLocalではなくTimezoneが正確に何かを見つけて使用する必要があります。

0

それは彼らがあなたに与えているものによって異なります。しかし、彼らはあなたにthis method of .Net 4.6を使用し、それをあなたの現地時間に.ToLocalTime()で変換することができるUTCのLinux時間を与えていると仮定します。他の答えが示すように、.ToLocalTime()の代わりに "TimeZoneInfo"を指定することをお勧めします。

関連する問題