2013-04-10 5 views
10

これは疑問ではありません。重複していません。このquesitonsは、どのように変換を実行するかではなく、変換方法に問題があることを示しています。質問全体を読む。 1365151714493epoch/unixをDatetimeに変換する

http://www.epochconverter.com/

私は周りを見回したと発見した:

は、私はUNIXタイムスタンプは、以下のコンバータを使用しているとき、それは正しく

はバリュースタンプを変換していると考えているタイムスタンプを持っていますこれをdatetimeオブジェクトに変換する方法についてはexampleです。このメソッドは単純なようですが、datetimeオブジェクトを作成し、1970年1月1日に夜を設定し、その値を秒として追加します。

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp) 
{ 
    return new DateTime(1970, 1, 1, 0, 0).AddSeconds(Convert.ToDouble(unixTimeStamp)); 
} 

問題は、上記の値でこのmehodを呼び出すたびに発生し、範囲外の値が得られます。

最初に値を指定する必要はありますか?文字列はdouble okに変換されます。例外はAddSeconds(double) methos

+0

タイムスタンプはミリ秒で、_not_秒であることを確かめてください。編集:あなたが知っていない限り...それは将来43,259日付を表すことになっています。 –

+0

これはどのように重複ですか?あなたが提供したリンクは変換を行う方法を尋ねることです。私は変換をしようとするときに問題について尋ねています! –

答えて

14

タイムスタンプ(1365151714493)は秒単位ではなくミリ秒単位です。 1000で除算するか、代わりにAddMillisecondsを使用する必要があります。それが秒として扱われた場合、それは将来、約43,259(荒い計算)年の日付です。これはDateTimeの範囲を超えており、maxes outは10000年であるため、ArgumentOutOfRangeExceptionを投げます。

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp) 
{ 
    return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(unixTimeStamp)); 
} 

また、V4Vendettaの推奨するGMTにすることを検討することもできます。さらに、複数の形式(秒またはミリ秒)を使用することが予想される場合は、解析された値の迅速なサイズチェックが賢明かもしれません。

+0

私が読んだすべての記事がタイムスタンプの例を数秒で与えてくれたので、値がミリ秒である可能性を完全に見落としました。ありがとう –

5

を呼び出すときに、私はあなたがそれはそれは価値が伝統的なunix timestamp as in secondsミリ秒単位であり、ないことを前提としていますが、言及サイトからもGMT

に関するものであるため、としてそれを試す必要がありますねスローされます

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
epoch = epoch.AddMilliseconds(yourvalue);// your case results to 4/5/2013 8:48:34 AM