4

Java メソッドを移行するのに助けが必要です:

(int)System.currentTimeMillis(); //result -186983989 (java) return diferent values

しかし、C# では常に同じ値を返します。

DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan span = DateTime.UtcNow - Jan1st1970;
Int32 resultado = (int)span.TotalMilliseconds; //result is always -2147483648 and i need same as java

デバッグのクイックウォッチでは正しい値が表示されることはまれですが、実行中resultadoは常に -2147483648 です。

Javaと同じ-186983989の結果が必要です。

4

3 に答える 3

3

Int64(long)を使用することをお勧めします。Int32は、値を保持するのに十分な大きさではありません。

Int32.MaxValue = 2,147,483,647
Int64.MaxValue = 9,223,372,036,854,775,808

http://forums.asp.net/post/1203789.aspx

于 2012-04-27T20:25:31.510 に答える
2

TotalMilliseconds は、Int32 ではなく double です。あなたの問題かもしれません

于 2012-04-27T20:23:31.790 に答える
0

オーバーフロー動作を模倣するには、 unchecked キーワードを使用して何かを行うことができますが、これが正しいかどうかを知るのに Java について十分に知りません

DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan span = DateTime.UtcNow - Jan1st1970;

unchecked{
     int mm = Int32.MaxValue;
     mm += (int)(span.TotalMilliseconds % Int32.MaxValue);
     Console.WriteLine(mm); 
}

余談として -2147483648 = Int32.MinValue

于 2012-04-27T20:53:50.637 に答える