15

これは重複した質問ではありません。この質問は、変換の実行方法ではなく、変換方法の問題を示しています。質問を完全に読んでください。

次のコンバーターを使用すると、タイムスタンプが正しく変換されます。

値: 1365151714493

http://www.epochconverter.com/

これを日時オブジェクトに変換する方法の例を見つけました。方法は単純に見えます。日時オブジェクトを作成し、日付を 1970 年 1 月 1 日の夜に設定し、値を秒として追加します。

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

問題は、上記の値でこのメソッドを呼び出すたびに、範囲外の例外が発生することです。

最初に値で何かをする必要がありますか? 文字列は double ok に変換されます。AddSeconds(double)メソッドを呼び出すときに例外がスローされます

4

2 に答える 2

18

そのタイムスタンプ (1365151714493) は秒単位ではなくミリ秒単位です。で割る1000か、AddMilliseconds代わりに使用する必要があります。秒として扱うと、約 43,259 (概算) 年後の日付になります。これは、10000 年で最大DateTimeになる範囲を超えているため、 .ArgumentOutOfRangeException

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

V4Vendetta が提案したように、強制的に GMT にすることを検討することもできます。さらに、形式 (秒またはミリ秒) が混在することが予想される場合は、解析された値のサイズを簡単にチェックすることが賢明かもしれません。

于 2013-04-10T12:54:43.237 に答える
6

GMTに関してなので、試してみるべきだと思います

また、あなたが言及したサイトから、値はミリ秒単位であり、秒単位の従来のUNIXタイムスタンプではないと想定しています

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
于 2013-04-10T12:50:35.970 に答える